gpt4 book ai didi

java - NULL 上的方法调用工作正常 - 期待 NPE

转载 作者:行者123 更新时间:2023-12-02 02:50:47 24 4
gpt4 key购买 nike

我能够在null上调用greet方法,这里我期待NPE,因为我们无法从语言中调用null上的方法规范JLS-15.12

但是我在这里得到hello world

    public class Test{
public static void greet() {
System.out.println("Hello world!");
}

public static void main(String[] args) {
((Test) null).greet();
}
}

有人可以帮助我为什么我得到的是 hello world 而不是 NPE

最佳答案

编译器将您的调用替换为静态调用。如果您使用javap -v className检查字节码,您将看到它。

stack=0, locals=1, args_size=1
0: invokestatic #31 // Method greet:()V
3: return

编译器知道您不必要地使用复杂的方式来调用您的方法,并将其简化为基本的静态调用。静态方法应该在静态上下文中调用,而不是在实例上下文中调用,任何好的 IDE 都会要求您更改现有代码。

即使您执行new Sample().greet();,编译器也会执行相同的优化。

关于java - NULL 上的方法调用工作正常 - 期待 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43864502/

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