首先,思考一下以下代码有什么区别:
String s1 = "abc";
String s2 = new String("abc");
看一下这两段代码的运行结果,会不会有所感悟呢?
看了这两段代码。你会觉得,同样是判断两者的地址,为什么两者的结果不同?首先,我们可以看到,String s4 = new String("def");
这条语句其实创建了两个对象,一个new,一个字符串对象,它们存在堆内存中。String s3 = "def";
该类类型变量存放在字符串常量池中,它是可以被共享的,因此第一段代码显示的结果是相同的。
注意:System.out.println(s3.equals(s4));//true
因为String类将equals()方法复写啦!