概述
(1)最常用的是==和equals,==多用于比较基本变量,equals是Object中的方法,判断两个对象是否具有相同的引用。但是他的子类可以根据自身实际情况进行覆盖,如String类中,==用来比较两变量内存地址是否相同,equals比较两变量内容是否相同;但是在别的未覆盖equals方法的类中,即使两对象内容完全相同equals比较的结果仍然是返回false.对于equals只要知道在比较字符串内容时使用就行了。
(2)Java中对于equals方法要求所具有的特性:
1)自反性:对于非空引用x,x.equals(x)应该返回true
2)对称性:如果x.equals(y)返回true,那么y.equals(x)返回true
3)传递性:x.equals(y)为true,y.equals(z)为true,则x.equals(z)为true
4)一致性:如果x,y引用的对象没有发生变化,反复调用equals的返货结果应该相同
5)对于任意非空引用x,x.equals(null)应该返回false
先给出完美的equals方法:(比较对象为otherObject)
1)监测本类对象与otherObject是否引用同一对象(比起直接检测各个域要节约成本)
if(this==otherObject) return true;
2)检测otherObject是否为full
if(otherObject==null) return false;
3)比较this与otherObject是否为同一类:
if(getClass()!=otherObject.getClass()) return false;
4)将otherObject转换为相应的类类型变量
Classname other=(ClassName) otherObject
5)比较所有需要进行比较的域:
return field1==otherObject.field1&&field2==otherObject.field2&&.......
6)在子类中定义equals方法时先调用super.equals(other).
注意:该方法声明时为:public boolean equals(Object otherObject)才能覆盖Object中的equals方法,而出于一般逻辑此时很可能将形参声明为本类类型public boolean equals(本类类型 otherObject),这时该方法是一个与Object equals方法完全无关系的方法,形成了重载。此时可以在语句前面用@Override进行标记,则编译器就会对未达到覆盖目的方法报错。
关于上述第三步,还有另一个方法可以实现:if(!(otherObject instanceof ClassName)) return false;这两个方法由于java对于equals方法的限制各有局限性,可根据以下建议来选择合适的方法:如果子类拥有自己的相等概念(相等要求的内容中包含子类特有的域),那么对称性要求采用getClass方法;如果相等概念由超类决定,那么使用instanceof进行检测。
最后
以上就是稳重春天为你收集整理的4,关于判断两个变量相等的问题的全部内容,希望文章能够帮你解决4,关于判断两个变量相等的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复