== 与 equals 区别
Java 分为基本数据类型和引用数据类,基本数据类型的值存在栈中,引用数据类型的值存在堆中, == 号比较的是栈的地址,equals方法也是继承object,String重写了equals方法,Object中equals是跟== 一样的比较的都是栈的地址,经过String类改写后equals将堆对象的内容取出逐一比较。这就是==与equals的区别。
Object中equals方法
public boolean equals(Object paramObject) { return (this == paramObject); }
String中equals方法
public boolean equals(Object paramObject) {
if (this == paramObject) {
return true;
}
if (paramObject instanceof String) {
String str = (String)paramObject;
int i = this.value.length;
if (i == str.value.length) {
char[] arrayOfChar1 = this.value;
char[] arrayOfChar2 = str.value;
byte b = 0;
while (i-- != 0) {
if (arrayOfChar1[b] != arrayOfChar2[b])
return false;
b++;
}
return true;
}
}
return false;
}
习题
String a = "123";
String b = new String("123");
String c= b;
System.out.println(a == b);//false
System.out.println(a == c);//false
System.out.println(b == c);//true;
System.out.println(a.equals(b));//true
System.out.println(a.equals(c));//true
System.out.println(b.equals(c));//true;