如何在Java中比较两个布尔对象
我试图比较两个布尔值是否具有相同的逻辑值,但只有当我比较相同的对象时,代码才起作用,对于以下代码,输出将为false,我不理解为什么:如何在Java中比较两个布尔对象,java,boolean,equals,Java,Boolean,Equals,我试图比较两个布尔值是否具有相同的逻辑值,但只有当我比较相同的对象时,代码才起作用,对于以下代码,输出将为false,我不理解为什么: public class Logic { private boolean bo; public Logic(boolean bo) { this.bo=bo; } public boolean equals(Object obj) { if (this==obj) ret
public class Logic {
private boolean bo;
public Logic(boolean bo) {
this.bo=bo;
}
public boolean equals(Object obj) {
if (this==obj)
return true;
else
return false;
}
public static void main(String[] args) {
Logic l1,l2;
l1=new Logic(true);
l2=new Logic (true);
System.out.println(l1.equals(l2));
}
}
您正在比较
equals
方法中的对象,而不是属性。正确的方法是:
public boolean equals(Logic obj) {
return this.bo==obj.bo;
}
你可以用这个 //布尔类的compare()方法 类geeksforgeks{
// Driver method
public static void main(String[] args)
{
// first value
boolean a = true;
// second value
boolean b = true;
// compare method
System.out.println(a + " comparing with " + b
+ " = " + Boolean.compare(a, b));
}
}
或检查此链接
正如您所知,新对象总是在堆空间中创建,对这些对象的引用存储在堆栈内存中。使用
==
比较两个对象时,会检查它们的引用是否指向同一对象?它不检查对象内容。
使用equal
方法的实现(使用==
比较对象),运行的输出:
public static void main(String[] args) {
Logic l1, l2, l3;
l1 = new Logic(true);
l2 = new Logic(true);
l3 = l1;
System.out.println(l1.equals(l2));
System.out.println(l1.equals(l3));
}
将是:
public boolean equals(Logic obj) {
return this.bo==obj.bo;
}
false
true
因为l1
和l2
指向不同的对象,但是l1
和l3
指向堆中的同一个对象。
我们应该重写equals
方法,以便它比较内容的相等性。根据Java语言规范,equals(Object)和hashCode()之间有一个约定:
如果根据equals(Object)方法,两个对象相等,则
对两个对象中的每一个调用hashCode方法都必须产生
相同的整数结果
记住这些,我们可以像这样重写equals(objectobj)
和hashCode()
:
@Override
public int hashCode() {
return Boolean.hashCode(bo);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this.getClass() == obj.getClass()) {
return bo == ((Logic) obj).boValue();
}
return false;
}
private boolean boValue() {
return bo;
}
我们使用它来比较两个布尔值。比较(布尔值a,布尔值b)
this==obj
不比较bo
值,而是比较Logic
的两个实例。不要忘记实现hashCode
,并使用@Override
注释重写方法。看见