明確概念:
物件的引用:當用類建立乙個物件時,類中的成員變數被分配記憶體空間,這些記憶體空間稱為該物件的實體,而物件中存放著引用(位址),以確保該實體由該物件操作使用。
一、比較物件為基本資料型別(byte,short,char,int,long,float,double,boolean)
比較兩個基本資料型別是否相等用==,因為只有類才會有equals方法。
備註:string不是基本資料型別
二、比較物件為引用資料型別
euqals和==本質上都是比較
比較的是兩個物件的引用(記憶體位址)是否相同
。equals()是object類的方法 ,object類是所有類的基類,所以每個類都會繼承equals()方法。 但在
string,integer,date在這些類當中重寫了equals方法,而不再是比較物件在堆記憶體中的存放位址了,而是比較它們指向的實體(內容)是否相同。
example:
person p1=new person();//使用new 關鍵字建立乙個物件會為此物件分配記憶體空間。
person p2=null; //此物件還沒有記憶體空間
p2=p1;//此時p1和p2指向的是同乙個記憶體空間 或說是指向同乙個實體(內容)
string s1 = "nihao";
string s2 = "nihao";
記憶體示意圖
s1==s2 //返回true,指向同乙個記憶體空間,s1和s2為同乙個物件
s1.equals(s2)//返回true
string s3=new string("nihao");
string s4=new string("nihao");
記憶體示意圖:
s3==s4//返回false,s3和s4分別指向不同的記憶體空間
s3.equals(s4)//返回true,它比較的是兩個字串的內容
所以 對於引用型別之間進行equals比較,在沒有覆寫equals方法的情況下,還是比較它們在記憶體中的存放位址是否相同,因為object的equals方法也是用雙等號(==)進行比較的,所以比較後的結果跟雙等號(==)的結果相同。
以上為個人總結,若有錯誤之處,請大家批評指正。
java 與equal 的區別
判定的是物件的等價性,必須是實實在在地是同乙個物件才返回true。判定基本型的值是否相等。int i1 47 int i2 47 system.out.println i1 i2 output true 基本型包裝類 integer n1 new integer 47 integer n2 new ...
java中 與 equal 的區別
看一段 string str1 new string str string str2 new string str system.out.println 比較 str1 str2 system.out.println equal比較 str1.equals str2 結果 比較 false equa...
Java中 和 的區別
第十一,short s1 1 s1 s1 1 有什麼錯?short s1 1 s1 1 有什麼錯?引出一下討論。賦值運算子,在編譯器將右邊的表示式結果計算出來後,和左邊的變數型別比較精度,如果左邊的變數精度低於右邊的結果的精度,編譯器會顯式的報錯,告訴程式設計師去強制轉型。所以s1 s1 1出錯 最...