equals 不用写得那么复杂,只写这两行就行了。public boolean equals(Object other) {
Card card = (Card) other;
return card.CardNum == CardNum && card.CardPwd == CardPwd;
}
Card card = (Card) other;
return card.CardNum == CardNum && card.CardPwd == CardPwd;
}
解决方案 »
- java关于16进制的问题
- 如何快速的从硬盘获得一张图片,并且判断图片的合法性?
- 如何在jtable 绑定数据库数据实现动态同步更新
- 怎麼解釋啊?
- 急啊,帮忙,在线等!
- JButton 如何点一下 弹出4个JButton在 JButton的位置之上
- 请教一下 (初学者)
- 怎么屏蔽JDialog的关闭按钮,既对话框右上角的X
- 实现JTree双击节点的可编辑
- org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.StackOverflowE
- 求"深入浅出JAVA语言程序设计"附书光盘中的代码
- 菜鸟问题:对于float型的变量,如何对其保留小数点后二位有效数字,并对第三位进行四舍五入操作?
?
equals 不用写得那么复杂,只写这两行就行了。public boolean equals(Object other) {
Card card = (Card) other;
return card.CardNum == CardNum && card.CardPwd == CardPwd;
}-----------------------------------------------------你的代码很有问题,很难想象你平时都这样写代码
如果other不是Card的实例,就会抛出ClassCastException改写equals要遵守以下几个约定
1.自反性。 x.equals(x) 一定为true
2.对称性。当且仅当y.equals(x)返回true时,x.equals(y)也一定返回true
3.传递性。对于人意的x,y,z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.quals(z)一定返回true
4.一致性。对于任意的引用值x和y,如果用于equals比较的对象信息没有被修改的话,那么,多次调用x.equals(y)要么返回true, 要么返回false
5.对于非空引用x, x.equals(null)一定返回false。
绝对正确的应该是:
public boolean equals(Object obj) {
if (obj == this) {
return true; // 仅仅为了效率
}
if (!(obj instanceof Card)) {
return false;
}
Card other = (Card)obj;
return cardNum == other.cardNum && cardPwd == other.cardPwd;
}
对于字符串来说,如果你的字符串是"abc"这种方式构造的,那么它们指向同一个地址,所以比较结果是相等,反之则不行。
所以你最后应该写成
return cardNum.equals( other.cardNum )&& cardPwd.equals(other.cardPwd);
呵呵,谢谢指教。说实在的,这样的活,我干得少,信口胡说罢了。不过,真正遇到实际问题的时候,可能也许大概差不多会考虑吧。
关键是
return card.CardNum == CardNum && card.CardPwd == CardPwd;这样写是不对的。
==的比较和equals的比较是不一样的。==比较的是是不是同一个对象;equals比较的是字符串的内容。
例如下面的例子:
String a="12345";
String b = "";
String c = "12345";
b= b + '1';
b= b + '2';
b= b + '3';
b= b + '4';
b= b + '5';
System.out.println(a == b);
System.out.println( a.equals(b));
System.out.println( a==c);
System.out.println( a.equals(c));
返回的结果是:false,true,true,true。
如果你是要判断两个String的内容是否相等的话,还是应该用equals。
trumplet 的写法并没有什么不妥,因为抛出一个ClassCast异常往往有益于发现程序中的问题.
因为我们一般不会去比较两个不同的类型,出现这种问题一般都是潜在的bug