Java 中equals 與 的 區別

2021-07-13 16:42:54 字數 908 閱讀 4897

先來看以下**

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 類,它的值不可變。看起來似乎很有道理,那麼來檢測一下吧,稍微改動一下...