以前还以为搞清楚了,现在才发现对于字符串的理解存在很大误区,多亏了楼主的帖子,要不然现在还迷糊着。
JAVA对于String是如何处理的?Java为了更有效地使用内存,JVM留出一块特殊的内存区域,被称为“String常量池”。当编译器遇见String常量的时候,它检查该池内是否已经存在相同的String常量。如果找到,就把新常量的引用指向现有的String,不创建任何新的String常量对象。
"a" "b" "ab"存在于常量池中,s2=s1+"b";s1是对象,并不是在常量池中开辟的,而是在堆内存开辟的,"ab"存在于常量池中,所以引用地址不一样。==是比较对象的引用地址和值是否都相等,这里引用地址不一样,因此是false。