2015年11月29日 星期日

字串比較 == 與 equals

在JAVA的字串比較中:
 ==      用來比對是否兩個字串指向同一個物件
equals 用來比對字串內容是否相同

String s1 = "JAVA";
String s2 = "JAVA";
String s3 = new String("JAVA");
String s4 = new String("JAVA");

其中:

s1 == s2  //true 由於物件池的存在 s1與s2的宣告方式 其實會指向同一個字串物件
s1.equals(s2) //true 內容相同
s3 == s1 //false 不同物件
s3.equals(s1) //true 內容相同
s3 == s4 //false 不同物件
s3.equals(s4) //true 內容相同


何謂字串池?

在Java1.4之後,為了提升字串的使用與效能,特別為字串在記憶體中(的Heap區 )建立了一個虛擬的物件池來存放字串。凡是直接指定字串的宣告,如s1與s2,其字串物件都會被放進字串池中。
字串池有個特點就是,相同的字串內容不會被重複建立字串物件,所以上面的s1與s2會是相同的物件,而s3與s4由於並沒有被存放在物件池中,所以實際上是兩個不同的物件。


注意:

由StringBuilder建立的物件是StringBuilder物件不是字串物件,所以不應該直接用equals與字串做比較,一般是使用toString()方法後再與字串比較。

StringBuilder s1 = new StringBuilder("Test");
String s2 = "Test";

其中:

s1 .toString().equals(s2); //true 內容相同

沒有留言:

張貼留言