1.「==」運算子專門用來比較兩個變數的值是否相等,也就是用於比較變數所對應的記憶體中所儲存的數值是否相同,要比較兩個基本型別的資料或兩個引用變數是否相等,只能用==操作符。
如果乙個變數指向的資料是物件型別的,那麼,這時候涉及了兩塊記憶體,物件本身占用一塊記憶體(堆記憶體),變數也占用一塊記憶體,例如objet obj = new object();變數obj是乙個記憶體,new object()是另乙個記憶體,此時,變數obj所對應的記憶體中儲存的數值就是物件占用的那塊記憶體的首位址。對於指向物件型別的變數,如果要比較兩個變數是否指向同乙個物件,即要看這兩個變數所對應的記憶體中的數值是否相等,這時候就需要用==操作符進行比較。但是如果要比較這兩個物件的內容是否相等,那麼「==」運算子就無法實現了。
2.equals(object)方法的特殊之處就在於它可以被覆蓋,如果在沒有覆蓋方法的情況下,equal(object)和「==」運算子一樣,比較的是引用,可以通過覆蓋的方法可以讓他不是比較引用而是比較資料內容。例如string類的equals方法是比較兩個獨立物件的內容是否相同,即堆中的內容是否相同。
例如,對於下面的**:
string a=new string("foo");兩條new語句建立了兩個物件,然後用a、b這兩個變數分別指向了其中乙個物件,這是兩個不同的物件,它們的首位址是不同的,即a和b中儲存的數值是不相同的,所以,表示式a==b將返回false,而這兩個物件中的內容是相同的,所以,表示式a.equals(b)將返回true。string b=new string("foo");
如果乙個類沒有自己定義equals方法,那麼它將繼承object類的equals方法,object類的equals方法的實現**如下:
boolean equals(object o)這說明,如果乙個類沒有自己定義equals方法,它預設的equals方法(從object類繼承的)就是使用==操作符,也是在比較兩個變數指向的物件是否是同一物件,這時候使用equals和使用==會得到同樣的結果,如果比較的是兩個獨立的物件則總返回false。如果你編寫的類希望能夠比較該類建立的兩個例項物件的內容是否相同,那麼你必須覆蓋equals方法,由你自己寫**來決定在什麼情況即可認為兩個物件的內容是相同的。
和 equal 的區別
public class equaltest 執行結果為 t1 t2 false t1 t2 t3 true t3 t4 true i1.equals i2 false i3.equals i1 i2 true i3.equals i4 true st1 st2 false st1 st2 st3 ...
equal和「 」的區別
對於基本資料型別,判斷兩個變數的值是否相等。equal 不能用於基本資料型別。只能用於類變數。對於基本資料型別要用其包裝類。因為物件變數的儲存的是物件在記憶體中的路徑,即記憶體位址。所以用 比較時,即使物件的值相等,但是他們的記憶體位址不同,所以 的結果為false。故 用於比較兩個變數的值是否相等...
equal和「 」的區別
因為物件變數的儲存的是物件在記憶體中的路徑,即記憶體位址。所以用 比較時,即使物件的值相等,但是他們的記憶體位址不同,所以 的結果為false。故 用於比較兩個變數的值是否相等,而不是變數引用的物件是否相等。equal用於比較兩個物件是否相同型別,值是否相等。總之 比較的是值 變數 棧 記憶體中存放...