这个问题太经典了
String str="abc";
String str1=new String("abc");
System.out.println(str==str1);//false
System.out.println(str1.equals(str1));//true
str==str1:比较的是内存地址值,str是匿名字符串对象,持有的引用来自字符串常量池,str1持有的引用来自堆内存,因为是通过new关键字在堆内存中单独开辟空间 的,所以,两者的内存地址值不一致,返回false
str1.equals(str1):这个是通过String的equals比较字符串,由于String覆写了equals方法,实现的机制是比较内容,所以,只要内容一致,就返回true
|