Re: [問題] 請問要如何比較兩個物件?
以單純沒有被覆寫(Override)的equals()方法來說,他是比較兩個物件在stack
記憶體區塊中的內容是否相等。也就是比較兩個物件的object reference。
針對以上的說明,我再說清楚一點。
比如說:
class MyClass
{
String name;
MyClass(String s)
{
name = s;
}
}
class MyClassEx
{
public static void main(String [] args)
{
MyClass m1 = new MyClass("Java");
MyClass m2 = new MyClass("Java");
System.out.println(m1.equals(m2));
}
}
上面這樣的結果是會回傳false的。原因是因為 m1 和 m2 兩個是不同的物件,在stack
記憶體區塊中的值是不同的(可能一個是xad5c、一個是x4rfd之類的)
至於要怎麼樣比較,這樣就是歸類到business logic的範圍當中,必須要由
程式設計師自己來定義。
※ 引述《adrianshum@kkcity.com.tw ( )》之銘言:
: ※ 引述《tkcn.bbs@ptt.cc (小安)》之銘言:
: > 如果這個 C 是你自己寫的物件
: > 你必須自己定義什麼叫做 "相同"
: > 也就是 override equals method
: > 例如: public boolean equals(C c){
: > return this.value == c.value;
: > }
: > 如果你沒有這麼做,
: > 則將會繫結至 Object.equals()
: > 而 Object.equals() 又是以 hashCode 作判斷....hmm..
: 沒記錯的話, Object.equals() 並非以hashCode 作判斷.
: 只是單純檢查是不是同一個 instance 而已
: Alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.165.120.21
※ 編輯: kevingo 來自: 218.165.120.21 (09/23 23:06)
※ 編輯: kevingo 來自: 218.165.120.21 (09/24 00:33)
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章