本帖最后由 程金 于 2012-9-14 18:56 编辑
很简单 (有误,待编辑) 前面s1,s2的类型是final的,编译时常量,s3就相当于是两个常量字符串连接,jvm对编译时常量字符串相加优化,编译时s3=s1+s2被替换成:s3="ab"+"cd"="abcd" ,s3指向常量池"abcd",同理,jvm对字符串的优化处理,你的str1不是对象,也是一个指向常量池中"abcd"的的引用变量,所以s3和str1相同,而后面的s6等于s4,s5相加,这是在s6是在运行期才能确定的,创建了s6对象,所以和str1不相等 |