java - java中Boolean和boolean的不同结果

标签 java boolean

我的代码没有给出正确的结果,我开始排除故障并发现了一个奇怪的错误,有人可以向我解释一下吗。

如果我选择字段并执行此操作,结果会变为 result1 == false 且 result2 == true,为什么?

        MyClass m1 = new MyClass();
        MyClass m2 = new MyClass();

        Field[] fieldsFirst = m1.getClass().getDeclaredFields();
        Field[] fieldsSecond =  m2.getClass().getDeclaredFields();

        for (int i = 0; i < fieldsFirst.length; i++) {

            Field first = fieldsFirst[i];
            Field second = fieldsSecond[i];

            first.setAccessible(true);
            second.setAccessible(true);

            if(first.get(m1) instanceof Boolean)
            {
               boolean b1 = (Boolean)first.get(m1); 
               boolean b2 = (Boolean)second.get(m2);

               //Here are the results
               boolean result1 = b1 != b2; // false
               boolean result2 = (Boolean)first.get(m1) != (Boolean)second.get(m2); // true

            }

如果我有:

public class MyClass {

private boolean myBoolean = true;

public boolean getMyBoolean()
{
return myBoolean;
}
public void setMyBoolean(booelan inBool)
{
myBoolean = inBool;
}

}

最佳答案

boolean result1 = b1 != b2; // false

您正在比较原始值,如 unboxing conversionb1b2 结果。从 boolean 值到 boolean 值。

boolean result2 = (Boolean)first.get(m1) != (Boolean)second.get(m2); // true

您正在比较引用文献。每个get() 的结果都引用不同的对象。因此,!= 比较为 true

关于java - java中Boolean和boolean的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497427/

相关文章:

javascript - (!value) 是否对所有假值都求值为真?

c++ - 不可预测的 boolean 比较 C++

haskell - 手动定义 boolean 连接

java - 了解 Java 内存管理

java - Hibernate 进行 N+1 查询以初始化父类(super class)中的惰性集合

java - 返回一组映射中的所有键

java - 使用 spring mvc 上传 jquery 文件 : 400 bad request

java - JSoup 内容与使用桌面 Web 浏览器时不同

java - 程序的 MySQL boolean 输入未按预期工作

python - "or"运算符不返回 bool 的动机是什么?