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操作符,意味著將在記憶體中產生兩個內容為 "foo "的字串,既然是「兩個」,它們自然位於不同的記憶體位址。a和b的值其實是兩個不同的記憶體位址的值,所以使用 "== "操作符,結果會是false。誠然,a和b所指的物件,它們的內容都是 "foo ",應該是「相等」,但是==操作符並不涉及到物件內容的比較。
物件內容的比較,正是equals方法做的事。
看一下object物件的equals方法是如何實現的:
boolean equals(object o)
object物件預設使用了==操作符。所以如果你自創的類沒有覆蓋equals方法,那你的類使用equals和使用==會得到同樣的結果。同樣也可以看出,object的equals方法沒有達到equals方法應該達到的目標:比較兩個物件內容是否相等。因為答案應該由類的建立者決定,所以object把這個任務留給了類的建立者。
java中「 」 與 equals 區別
首先這是乙個很經典的例子,我們可以編寫乙個簡單的例子如下 有上述例子我們可以知道,是比較的我們資料位址,而equals則比較的是資料內容,a b,因為a,b為常量在常量池中為同意資料塊,所以相等,a1,b1是不同物件,在堆中儲存在不同區域,位址不同,所以a1 b1為false 那麼有些就奇怪了,為什...
java中equals 與 的區別
public class teststring 這個程式真是簡單啊!可是有什麼問題呢?1.來自 string 的憂慮 上面這段程式中,到底有幾個物件呢?可能很多人脫口而出 兩個,s1 和 s2 為什麼?string 是 final 類,它的值不可變。看起來似乎很有道理,那麼來檢測一下吧,稍微改動一下...
Java中 與equals的區別
equals和 是兩個很容易混淆也是很多初學者容易搞不清的比較 方法 下面舉個例子,大家就一目了然了 比如 integer int1 new integer 1 integer int2 new integer 1 string str1 new string hello string str2 n...