gpt4 book ai didi

java - 比较来自两种不同类型的两个空对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:35 28 4
gpt4 key购买 nike

public void m1(Integer f) {
...
}

public void m1(Float f) {
...
}

public void main() {
m1(null); // error: the method m1(Integer) is ambiguous for the type Main
m1((Integer) null); // success
}

鉴于上面的示例,我们可以以某些方式承认 null 是类型。那么为什么下面的行打印true呢?当然 o1o2 都没有值(即 null),但它们不是来自同一类型(IntegerFloat)。我一开始以为 false 会被打印出来。

Integer i = null;
Object o1 = (Object) i;
Float f = null;
Object o2 = (Object) f;
System.out.println(o1 == o2); // prints true

// in short:
System.out.println(((Object) ((Integer) null)) == ((Object) ((Float) null))); // prints true

最佳答案

所有 null 值都是无类型且相等的。您可以将它传递给不同的引用类型,但出于比较目的,它没有区别。

输入的不是 null 值,而是可以输入的对 null 的引用。

一个常见的问题是这里发生了什么

class A {
public static void hello() { System.out.println("Hello World"); }

public static void main(String... args) {
A a = null;
a.hello();
System.out.println("a is an A is " + (a instanceof A)); // prints false.
}
}

编译器a 的类型视为A,因此调用静态方法。但引用的值是 null 且未类型化。

在不引起 NullPointerException 的情况下,您可以使用 null 执行的唯一操作是分配或传递它而不检查它或将它与另一个引用进行比较。

顺便说一句

简而言之:编译器会根据引用的类型选择方法,运行时根据引用对象的类来执行。在运行时 null 被视为任何类型或无类型,或者如果您尝试取消引用它,您将得到 NullPointerException。

关于java - 比较来自两种不同类型的两个空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12617495/

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