注:
String是一个比较特殊的类型,就是存在一个字符串池。当直接将一个字符串赋值给一字符串变量时,
如果字符串池中存在该字符串的话,就直接从字符串池中获得,而不另外new 一个字符串。
如果字符串池中没有对应的字符串,则就先在堆中new一个对应的字符串,之后保存到字符串池中。
但如果是用new来创建String字符串对象,则就是在堆中生了一个独立的对象。
一,s1 = s2 -->false。
因为s1 new 的是在内存中的一个String类型的独立对象,而s2是保存在字符串池中的。所以地址不一样。
二,s1.equals(s2) -->true。
因为String重写了equals方法,其比较的是字符串的值,而不是地址。所以是true。
三,s2==s3 --> true。
因为当创建s2字符串时,就在字符串池中生成了一个'abc'字符串,而s3的值与s2的值相同,所以s3就直接从字符串池中直接那字符串'abc',所以s2 和 s3指向的是同一个对象地址。结果为:true。
四,s2.equals(s3) --> true。原因同三。 |