關於String類型變量的比較問題

String str1 = "abc";
String str2 = "abc";

上述中的"abc"會被存放到常量字符串池中,定義str1和str2指向了字符串池中的"abc"(這裏有個原則:指向的字符串如果存在,就共享)

java中的串池有兩個特點:

1、串池中的內容一經創建便不可改變,平時見到的串內容發生了改變那是假象,其實是丟棄了舊串,創建了新串;

2、當串池中的內容沒有指針指向它的時候,它也不會被JVM的垃圾回收機制回收;

3、串池中的內容不允許重複。比如下面的例子:



String  str3 = new String("abc");

定義一個str3指向一個new String("abc")對象,JVM首先在字符串池中查找有沒有"aaa"這個字符串對象,如果有,則不在池中再去創建"aaa"這個對象了,直接在堆中創建一個"aaa"字符串對象,然後將堆中的這個"aaa"對象的地址返回賦給引用str3,這樣,str3就指向了堆中創建的這個"aaa"字符串對象;


使用 str1==str2 是true,這裏比較的是堆內存地址,比較str1和==tr3就會返回false.

字符串內容的比較需要使用equals方法

str1.equals(str3)

這個結果返回的是true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章