基本的資料型別都放在stack(棧)中;引用型別變數放在stack(棧)中,真正的內容放在heap(堆)中。
堆:首先堆是動態分配的,jvm並不會自動釋放這部分記憶體。只用等待系統的gc來進行記憶體**。
棧:是在類載入中有系統靜態分配的,而且分配時按照記憶體的高低位址分配。這部分記憶體系統會自動進行釋放。
類object是類層次結構的根類,每個類都使用object作為超類,所有的物件(包括陣列)都實現這個類的方法。
對於乙個類一般都會重寫object類中的equals()、hashcode()、tostring()方法,全部繼承下來。
在string類中對equals方法進行了重寫(改變父類中的函式功能以滿足自己的需求)功能是比較兩個字串的值是否相同。
類似的還有integer,integer比較的也是值而非位址。
==:對於基本資料型別(int/long/short/float/double/byte/char/boolean)比較的是值;
對於封裝模擬較的是物件的引用---在堆中儲存的位址是否相同。
equals:
不能用於基本的資料型別,只能用於類變數;
object類中的equals方法和「==」是一樣的,object的equals原始碼是比較hashcode的,沒有區別;
而string類,integer類等等一些類,是重寫了equals方法,才使得equals和「==不同」,此時equals比較的是內容值。
當自己建立類時,自動繼承了object的equals方法,此時比較自定義類用equals和==是一樣的,但是要想實現不同的等 於比較,必須重寫equals方法。例如建立乙個student類,new了幾個student例項,我們在程式中怎麼判斷這幾個例項是否是同乙個學生呢?這時候就可以重寫equals方法了(定義按學號來比較,學號相等則物件例項相等)。
例如,兩個物件值相同(x.equals(y) == true),他沒說是誰的物件,如果是object類的物件,,equals( )比較的是位址值,
如果是string類的物件,,,string類重寫了equals( )比較的是內容
equals和 的比較
基本資料型別判斷的是基本資料型別的值 兩端資料型別不同,也可以返回true int 66 char b 比較的是常量區的值 引用資料型別比較的是位址值 public class main public static void main string args string類中equals原始碼 pu...
equals方法和 的比較
我想應該有和我遇到一樣問題的,equals 和 到底什麼區別呢?繼承object中的equals public boolean equals object obj return this obj string 型別重新object中的equals public boolean equals obje...
Java「 」和equals 之間的比較
用來比較基本資料型別的值,或引用型別變數的雜湊值 實現就是呼叫 public boolean equals object obj 但有的類會重寫該方法,例如string,這是乙個物件,它的equals不是用來比較位址,而是用來比較字串的每乙個字元值 public boolean equals obj...