本帖最后由 棉/mg花/x糖 于 2013-5-23 23:24 编辑
楼主,别苦恼,我来帮你解释。
其实,这很容易理解,s1、s2、s3引用的均是在编译时就加载进内存的字符串常量。
也就是说:"你好"、"你"、"好"的地址在编译时就唯一确定了。
因此,s1、s2、s3的地址的完全不一样。自然 s1 == s2+s3的值为false了。
那为什么 "你好" == "你"+"好" 的值为ture呢?
这是因为字符串常量拼接是值的拼接,拼接好后它得存储(临时空间)啊,他会先去查找在本程序所占内存空间中有没有"你好"这个存储块,如果有,就直接将引用地址指向它,即和字符串对象s1共用一段存储区间;否则,得另外开辟空间(临时空间)存这个新字符串常量。
这是由于Java关于引用对象的多余内存空间回收机制所致。
最后是“==”运算,对于引用对象,“==”是对地址值得判定,结果显然为true。
注意:字符串常量也是引用类型数据,他是匿名的引用对象。
希望能帮到你^_^
|