String s1 = “abc”;
String s2 = “abc”;
System.out.println(s1 == s2); true
System.out.println(s1.equals(s2)); true
s1的值是在常量池中的
常量池的特点
如果池中没有那个常量,就重新创建一个
如果有,就直接拿出来使用
所以s2跟s1相同
String s1 = new String(“abc”);
这里面有2个对象 一个是在常量池里 一个是在堆内存里
String s1 = new String(“abc”);
String s2 = “abc”;
System.out.println(s1 == s2); flase
System.out.println(s1.equals(s2)); true
s1的值是堆内存里面的值
s2的值是常量池里面的值
String s1 =“a”+“b”+“c”;
java有常量优化机制
这样的结果就相当于在常量池里面创建一个abc
String s2 = “abc”;
System.out.println(s1 == s2); true
System.out.println(s1.equals(s2)); true
String s1 = “ab”;
String s2 = “abc”;
String s3 = s1+“c”;
System.out.println(s3 == s2); flase
地址值不是相同的
System.out.println(s3.equals(s2)); true 引用值是相同的