先來看以下**
public static void main(string args)
輸出結果:
true
true
false
true
分析:對於基礎資料型別(boolean,byte,char,short,int,float,double,long),「==」比較的是他們的值。如i1和i2,c1和c2。
對於復合資料型別,「==」比較的是他們在記憶體中的存放位址
。s1和s2雖然內容相同,但是他們指向的物件位址不同。
equals預設(object類中)是比較物件的記憶體位址,但是一些類庫中重寫了equals方法,如:string、integer和date類,應該
按照重寫的方法進行比較。一般都是比較物件的內容
區域性變數s1和s2是存放在棧記憶體中,而new出來的物件是放在堆記憶體中,s1和s2所指向的物件不同,位址不同,故s1==s2輸出false,前面說equals方法預設也是比較位址,但為何輸出true呢?因為:s1.equals(s2)處的equals不是object類中的,而是string類中,string類中重寫了object類中的該方法,因此比較的是物件中的內容(hello)。附上object和string中equals方法原始碼:
//object
public boolean equals(object obj)
//string
public boolean equals(object anobject)
if (anobject instanceof string)
return true;}}
return false;
}
java中equals()與 區別
int a 10 int b 10 則a b將是true。但不好理解的地方是 string a new string foo string b new string foo 則a b將返回false。物件變數其實是乙個引用,它們的值是指向物件所在的記憶體位址,而不是物件本身。a和b都使用了new操作...
java中「 」 與 equals 區別
首先這是乙個很經典的例子,我們可以編寫乙個簡單的例子如下 有上述例子我們可以知道,是比較的我們資料位址,而equals則比較的是資料內容,a b,因為a,b為常量在常量池中為同意資料塊,所以相等,a1,b1是不同物件,在堆中儲存在不同區域,位址不同,所以a1 b1為false 那麼有些就奇怪了,為什...
java中equals 與 的區別
public class teststring 這個程式真是簡單啊!可是有什麼問題呢?1.來自 string 的憂慮 上面這段程式中,到底有幾個物件呢?可能很多人脫口而出 兩個,s1 和 s2 為什麼?string 是 final 類,它的值不可變。看起來似乎很有道理,那麼來檢測一下吧,稍微改動一下...