gpt4 book ai didi

java - 为什么 int-to-Object 比较在 Java 7 中有效,但在 Java 8 中无效?

转载 作者:IT老高 更新时间:2023-10-28 13:54:13 27 4
gpt4 key购买 nike

以下代码,

private boolean compare(Object a, int b) {
return a == b;
}

在 Java 7 中编译,但在 Java 8 中导致以下错误:

incomparable types: int and Object

看下面的问题:

Comparing Object and int in Java 7

Java 6 和 Java 8 似乎不允许您比较 intObject,而 7 可以。有这方面的文档吗?

我对做出这些决定的背景知识很感兴趣。好像他们还没有决定什么的。

我正在使用 IntelliJ IDEA 14.1.4 与 JDK 1.7.0.51。

最佳答案

Java 7 将自动装箱应用于 int。

 private boolean compare(java.lang.Object, int);
Code:
0: aload_1
1: iload_2
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: if_acmpne 12
8: iconst_1
9: goto 13
12: iconst_0
13: ireturn

我使用 build 1.7.0_71-b14

创建了这个

编辑:

此行为已被 Oracle 识别并视为错误:
JDK-8013357 : Javac 接受错误的二进制比较操作

Relevant JLS section is 15.21. Javac seems to treat this as a reference comparison, but a reference comparison is only allowed when BOTH operands are reference types.
...
The type rules for binary comparisons in JLS Section 15.21 will now be correctly enforced by javac. Since JDK5, javac has accepted some programs with Object-primitive comparisons that are incorrectly typed according to JLS 15.21. These comparisons will now be correctly identified as type errors.

关于java - 为什么 int-to-Object 比较在 Java 7 中有效,但在 Java 8 中无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com