==和equals的比较
==:
==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址
equals:
equals:在object中默认也采用 == 来比较,通常会重写(如String类的equals方法被重写成对比字符串的内容)
public class StringDemo {
public static void main(String[] args) {
String str1 = "badminton";
String str2 = new String("badminton");
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
}
}
通过上述例子可以清楚看到,== 对比的是在堆中的内存地址,由于str1存在于常量池区,而str2存在于堆区,两个地址明显不一致,str3就是由str2赋值引用地址来的,所以str1==str2的结果为false,而equals比较的是变量的字符串内容,所以结果均为true。