以前對於這兩個的理解都是這樣的
對於==
如果是基本型別,則直接判斷值是否相等。
如果是引用資料型別,則比較存放位址是否相等。
對於equals()方法
比較存放位址是否相等。
現在的理解:
首先是資料儲存位置
棧(heap)記憶體中存放基本型別,引用,區域性變數;
堆(stack)記憶體中存放new出來的物件;
方法區(共享區,資料區)中存放靜態變數,字串常量,方法**。方法區的**被呼叫時,將在棧中開闢空間。執行完後,棧中的空間被釋放。
對於==
如果是基本資料型別,那麼它們是存在方法區中。方法區中只允許有乙個相同的資料,如果多次用到同乙個資料型別,則會指向方法區中相同的位址。
正是因為如此,才會說 對於基本資料型別,直接盤對是否相等。例如:
string a="asd";
string b=new string("asd") 這樣,實體地址一樣,==返回true,但是按照最開始的理解,用equals()方法應該也返回true了。但是結果是返回false.
這是為什麼呢?因為.equals()在比較的時候,首先要比較的是兩個是不是乙個型別,然後再比較實體地址是不是一樣,必須兩者都滿足,才返回true.
與equals的些許理解
是判斷兩個變數或例項是不是指向同乙個記憶體空間 equals是判斷兩個變數或例項所指向的記憶體空間的值是不是相同 除了string和封裝器,equals 和 沒什麼區別 但string和封裝器重寫了equals 所以在這裡面,equals 指比較字串或封裝物件對應的原始值是否相等,是比較兩個物件是否...
和equals的理解
equals方法是object類提供的乙個例項方法,所以所有的引用變數都可以呼叫該方法來判斷所指向的物件是否相等,該方法判斷的標準和 的判斷標準沒有任何區別都是用來比較需要比較物件的位址是否相同。但是為什麼有了 還要寫乙個equals方法呢?之所以這這樣多此一舉是因為可以讓子類重寫equals方法,...
和equals的理解
1 package testequals 2 3 測試by asceticj 4 本類是用來測試 和equals 方法 5 結果如下 6 1 和equals方法預設乙隻,均表示比較的是物件本身 7 2 基本資料型別的包裝類和string類的equals 的方法已經被預設重寫了 表示比較物件的內容 8...