java - 比较 Java 7 中的 Object 和 int

标签 java eclipse compare java-7 autoboxing

我最近偶然发现了一个让我停下来思考的问题......

对我来说,下面的代码应该总是触发错误,但是当我的一位同事问我为什么 Eclipse 不显示错误时,我什么也回答不了。

class A {
    public static void main(String... args) {
        System.out.println(new Object() == 0);
    }
}

我已经调查并发现在源代码级别 1.6 中确实会引发错误:

incomparable types: Object and int

但现在在 1.7 中它可以编译。

请问,什么新功能保证了这种行为?

最佳答案

“什么新功能保证了这种行为?”是什么意思? ? 1.7 正在修复 1.6 中存在的问题。 new Object() == 0 应该从未产生错误,并且总是导致触发自动装箱。

根本没有理由

Object a= 5 ;

是正确的,而不是表达式

a == 3

甚至

a == 5

这非常奇怪,恕我直言,与语言规范本身相矛盾。

不过,从动态的角度来看,a == 5 仍然计算为 false(Integer)a == 5 或甚至 (int)a == 5 的计算结果为 true。原因是自动拆箱被设计为永远不会产生 ClassCastException,因此仅针对包装类型静态发生。后两种情况是显式转换,因此通常允许 ClassCastException

关于java - 比较 Java 7 中的 Object 和 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500209/

相关文章:

java - spring-context.xml 的位置

java - .class 文件在哪里?

algorithm - 比较两个文档

使用 POSIX 系统调用比较 2 个文件

java - 如何在 java 中编写代码来查看 char 是否为 int?

java - maven-compiler-plugin 3.2编译错误: cannot find symbol

java - 我可以从 Java EE webapp 使用 Windows 身份验证连接到 SQL Server 吗?

java - Android 位图缩小不工作

java - 使用指向单个方法的按钮区分单击了android按钮数组中的哪个android按钮

android - 无法掉帧?