1. 程式人生 > >java中字串的比較

java中字串的比較

在寫java時遇到比較一個物件的字串和一個字串是否相等的問題,遇到了一些坑。

clipboard.png

在這段程式碼時,name1和name2的值都是"name",但是他們用==比較時確實不相等的。

首先,在java中String是一個物件,在用==比較兩個String物件的引用時,是比較兩個物件引用的值是否相等,就是比較是否指向同一個物件。name1在堆上建立了一個物件,name2也在堆上建立了一個物件,雖然物件的值都相同,但是記憶體地址卻是不一樣,是兩個不同的物件,name1指向的物件和name2指向的物件不同,所以==判斷返回的時false;

clipboard.png

但是這個判斷式卻是true,因為java在第一次遇到“name”這個字串時,回去快取區檢視有沒有“name”這個字串常量,沒有就建立,再把這個物件賦值給name1,當name2 = "name",時,快取區已經有"name"這個字串常量了,所以直接把字串常量賦值給name2,因此他們的引用物件是相同的,所以返回true.

clipboard.png

所以在這個表示式中,雖然main1和main2是不同的物件,但他們name屬性的所指物件是相同的,所以返回true.

如果要比較兩個物件的值是否相等,應該使用equalsclipboard.png