==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址
equals:object 中默认也是采用==比较,通常会重写
public boolean equals(Object obj){
return (this == obj);
}
String 中的equals方法被重写
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj instanceof String){
String s = (String)obj;
int n = value.length;
if(n == s.value.length){
char v1[] = value;
char v2[] = s.value;
int i =0;
while(n-- != 0){
if(v1[i] != v2[i]){
return false;
}
i++;
}
return true;
}
}
return false;
}
所以以下案例分析为:
public class Demo{
public static void main(stirng args[]){
String str1 = "Hello"; // 常量池中的对象(地址)
String str2 = new String("Hello"); // 堆中声明的变量(地址)
String str3 = str2; //引用传递(地址引用)
System.out.println(str1 == str2); //false
System.out.println(str1 == str3); //false
System.out.println(str2 == str3); //true
System.out.println(str1.equals(str2)); //true
System.out.println(str1.equals(str3)); //true
System.out.println(str2.equals(str3)); //true
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于