这是我从网上看到的一段话:
---------------------------------
String str1 = "Hi" 
String str2 = "Hi" 
那么编译器会很聪明的只创建一个实例而让 str1 和 str2 都指向这个地址 
所以这时 str1 == str2 就会返回 true 
---------------------------------应该是可以这么理解吧,
但是str1 和 str2 都指向这个地址(即它们是同一个引用),
那么如果str2=str2+"jim";
那么这时 str1 == str2 为什么返回 false,而不是true,
它们不都是指向同一个地址吗?

解决方案 »

  1.   

    str2=str2+"jim";
    就是实际上str2又创建了一个新的String,所以引用会变了String都是创建之后不可修改的,对他们进行+操作时只能重新生成一个
      

  2.   

    还真是这样,关注!是不是在付值的时候,编译器发现东西改变了,自动clone一个新的对象再付值!
      

  3.   

    在Java執行時會維護一个String池(Pool),对一些可以共享的字串对象,會先在String池中查找是否存在相同的String內容(字元相同),如果有就直接傳回,而不是直接創造一個新的String物件。