java中字串的比較
阿新 • • 發佈:2018-12-11
在寫java時遇到比較一個物件的字串和一個字串是否相等的問題,遇到了一些坑。
在這段程式碼時,name1和name2的值都是"name",但是他們用==比較時確實不相等的。
首先,在java中String是一個物件,在用==比較兩個String物件的引用時,是比較兩個物件引用的值是否相等,就是比較是否指向同一個物件。name1在堆上建立了一個物件,name2也在堆上建立了一個物件,雖然物件的值都相同,但是記憶體地址卻是不一樣,是兩個不同的物件,name1指向的物件和name2指向的物件不同,所以==判斷返回的時false;
但是這個判斷式卻是true,因為java在第一次遇到“name”這個字串時,回去快取區檢視有沒有“name”這個字串常量,沒有就建立,再把這個物件賦值給name1,當name2 = "name",時,快取區已經有"name"這個字串常量了,所以直接把字串常量賦值給name2,因此他們的引用物件是相同的,所以返回true.
所以在這個表示式中,雖然main1和main2是不同的物件,但他們name屬性的所指物件是相同的,所以返回true.
如果要比較兩個物件的值是否相等,應該使用equals