gpt4 book ai didi

java - 有数字 "value equals"吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:46 24 4
gpt4 key购买 nike

默认情况下,Java 执行 Binary Numeric Promotion对于基元,但对对象不做同样的事情。这是一个用于演示的快速测试:

public static void main(String... args) {
if(100 == 100L) System.out.println("first trial happened");
if(Integer.valueOf(100).equals(Long.valueOf(100))) {
System.out.println("second trial was true");
} else {
System.out.println("second trial was false");
}
if(100D == 100L) System.out.println("third trial, fun with doubles");
}

输出:

first trial happened
second trial was false
third trial, fun with doubles

这是显然正确的行为 - Integer 不是 Long。但是,Number 子类是否存在一个“值等于”,它会以与 100 == 100L 返回 true 相同的方式返回 true?或者 100d == 100L?换句话说,是否有一种方法(不是 Object.equals)可以对对象执行与二进制数字提升行为等效的方法?

最佳答案

这个

if(100 == 100L) System.out.println("first trial happened");

你得到了一些 Binary Numeric Promotion

Otherwise, if either operand is of type long, the other is converted to long.

因此 100L == 100L

这个

if(Integer.valueOf(100).equals(Long.valueOf(100))) {
System.out.println("second trial was true");
} else {
System.out.println("second trial was false");
}

“失败”,因为 Integer#equals() 方法检查传递的对象是否为 instanceof Integer。如果不是,则立即返回 false

这个

if(100d == 100l) System.out.println("third trial, fun with doubles");

与第一个相同,但 double 而不是 long

盒装类型的所有 equals() 方法都会检查它们各自类型的 instanceof,因此无法使它们工作。

你可能不喜欢这个解决方案,但它会是类似的东西

if (Integer.valueOf(100).intValue() == Long.valueOf(100).longValue()) {
System.out.println("second trial was true");
} else {
System.out.println("second trial was false");
}

关于java - 有数字 "value equals"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410357/

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