作者kevingo (kevingo)
看板java
标题Re: [问题] 请问要如何比较两个物件?
时间Sat Sep 23 23:04:58 2006
以单纯没有被覆写(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的范围当中,必须要由
程式设计师自己来定义。
※ 引述《[email protected] ( )》之铭言:
: ※ 引述《[email protected] (小安)》之铭言:
: > 如果这个 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)