String s1 = new String("abc"),在java里面一个字符串就是一个常量对象,而且不可以更改的,所以“abc”为一个对象,而String(String s)初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。
这样String s1 = new String("abc");String s2 = new String("abc")就有了两个“abc”的副本和一个“abc”
String s3 = “abc”;String s4 = “abc”就是把“abc”的地址赋值s3,s4,并没有创建新对象,而是创建了“abc”的引用,java中的引用的概率很重要,一定要分清楚
String s5 = “abcd”;这句话就不用解释了吧
String s6 = s3+“d”;前面说过,一个字符串就是一个对象,所以d是一个对象,而字符串相加后赋值给了s6,这又是一个新对象,虽然s6也是“abcd”,看起来和s5一样,但是并不相等,只是用equlas方法判断他们内容相同,因为s3是可变的
至于最后一个在常量池中都有,所以并没有创建新的对象,而是创建了引用s7指向“abcd”
|