源于一次公司项目,对java基础还是理解的太浅.
通常来说,Java判断两个对象是否相同可以用 ==
or equals()
;其中==
是对对象内存地址的比较,若地址相同则判断为true
,否则为false
;而如以下代码,理想情况下程序会打印输出
example1:
String a = "abc";
String b = "abc";
String c = new String("abc");
String d = new String("abc");
System.out.println(a == b);
System.out.println(a == c);
System.out.println(c == d);
那么a==b将返回true。因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指向的是同一个对象;
那么a==b将返回false,此时a和b指向不同的对象。
2、用equals方法比较的是字符串的内容是否相同,
example:String a=new String(“abc”);
String b=new String(“abc”); a.equals(b);将返回true。
通常情况下,为了避免出现上述问题,判断字符串是否相等使用equals方法
if(str1.equals(str2)){
System.out.println("字符串相等");
}else{
System.out.println("字符串不相等");
}
例:
String a = "数据";
String b = "数据";
a.equal(b)和b.equal(a)有什么区别
a.equal(b)和b.equal(a)表达式表达的意思是一样的,都是为了判定a和b两个string对象是否相同,
但是,前者表示a对象不能为空,否则会报错,后者表示b对象不能为空,否则报错
equals()是object的方法,其实现为:
public boolean equals(Object obj) {
return (this == obj);
}
String方法对其重写:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}