当前位置: 首页 > 面试题库 >

是否允许布尔值和对象相等?

伍光济
2023-03-14
问题内容

以下代码

public class TestComparison {
    public static void main(String[] args) throws Exception {
        boolean b = true;
        Object o = new Boolean(true);
        System.out.println("comparison result: "+ 
            (o == b)); // Eclipse complains about this expression
    }
}

使用javacV1.7.0_15 编译时没有错误,并且在运行时显示“ false”。但是,Eclipse Juno抱怨“操作数类型对象和布尔值不兼容”。

显然,javac自动装箱原始boolean
b,然后通过对象相等(yielding)进行比较o和自动装箱,而Eclipse拒绝执行自动装箱。b``false

根据Java语言规范,哪种行为正确?我应该在哪里提交错误?

注意: 如果将的类型更改oBoolean,则事情将按预期工作:Eclipse接受代码,并且代码显示“ true”。

ideone.com上的可运行版本


问题答案:

这是您的项目语言级别设置。您可能正在使用具有Java 6语义的Java
7编译器。我在这里没有Eclipse,但是我在IntelliJ中重现了它,即使我使用的编译器是7,语言级别在Java
6上时也会出错。该链接对此进行了说明。



 类似资料:
  • 问题内容: 因此,我听说如果将2个字符串与==进行比较,则只有它们都引用相同的对象/实例时,我才会返回true。那是琴弦。布尔呢? 问题答案: ==是否检查布尔值是否完全相等?-Java 这取决于您是在谈论s(对象包装,请注意大写)还是s(原始,请注意小写)。如果您在谈论s(对象包装器),就像处理所有对象一样,请检查 身份 ,而不是对 等 。如果您在谈论s(基元),它将检查是否相等。 所以: 但

  • 检查给定的参数是否是一个原生的布尔值。 使用 typeof 来检查一个值是否为一个布尔值。 const isBoolean = val => typeof val === 'boolean'; isBoolean(null); // false isBoolean(false); // true

  • 我需要一个可以在junit 方法中调用的方法,该方法比较两个布尔值以检查它们是否相等,并返回一个布尔值。例如,类似这样的事情: 如果不相等,则返回false,如果相等,则返回true。我已经检查了布尔类,但是唯一接近的是< code>Boolean.compare(),它返回一个int值,我不能使用这个值。

  • 问题是: 我们将“根到叶路径”定义为树中的任意节点序列,从根节点开始向下延伸到叶。该路径的“根到叶路径和”是沿该路径的所有节点(包括根)的和。定义一个空树,使其不包含根到叶的路径(因此其和为零)。定义一个具有一个节点的树,使其根到叶的路径仅由根组成(因此其总和是根的值)。给定一个二叉树和一个值“sum”,如果该树有一些根到叶的路径,使得沿路径的所有值相加等于“sum”,则返回true。如果找不到这

  • 问题内容: 众所周知,Python具有对象的布尔值:如果一个类具有一个方法,则该方法的每个实例恰好返回0的值都将被评估为布尔值(例如,空列表)。 实际上,每个可迭代的空自定义对象都被评估为好像它出现在布尔表达式中一样。 现在假设我有一个带有attribute的类。我如何定义它的真值,这样,也就是说,它会进行评估,并以其他方式? 例如: 因此,应打印。 问题答案: 请参阅Python文档。

  • 但是这个代码不起作用。编译器说 我在试图理解代码的问题是什么。我认为将返回一个布尔值流,我可以通过收集这些值。