如何在Java中比较两个布尔对象

如何在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

我试图比较两个布尔值是否具有相同的逻辑值,但只有当我比较相同的对象时,代码才起作用,对于以下代码,输出将为false,我不理解为什么:


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)); 
} 
}

或检查此链接

  • 例如,当您使用new创建对象时,l1在堆栈中的引用地址与l2在堆中的对象不同
  • 如果需要像Ingeter、Boolean等装箱对象,则不应比较这样的对象。正确的方法是将其解装箱,如下所示:

    布尔b1=新…,布尔b2=新。。。; 布尔bb1=b1; 布尔bb2=b2; 现在比较bb1和bb2


  • 正如您所知,新对象总是在堆空间中创建,对这些对象的引用存储在堆栈内存中。使用
    ==
    比较两个对象时,会检查它们的引用是否指向同一对象?它不检查对象内容。 使用
    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
    注释重写方法。看见