public class StringTest {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println("s1.equals(s2):" + s1.equals(s2));
System.out.println("s1==s2:" + (s1 == s2));
System.out.println("s3.equals(s4):" + s3.equals(s4));
System.out.println("s3==s4:" + (s3 == s4));
System.out.println("s1.equals(s3):" + s1.equals(s3));
System.out.println("s1==s3:" + (s1 == s3));
}
}
s1和s2中"hello"是存储在方法区中的常量池中的,而==比较的是两者的地址值,这时候是相等的,输出的是true
s3和s4与s1和s2的区别在于它们等于新建了对象,是在堆内存中存储的,是在堆内存中开辟的两块不同区域,==比较的是地址值,所以返回的是false,
而equals比较的是两个对象的内容是否相同,只要内容都是hello就输出的是true |