gpt4 book ai didi

java - obj == null 与 null == obj

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:13 29 4
gpt4 key购买 nike

我一直习惯于检查null之类的

if(null==obj)

当我编译我的代码并在反编译后查看 .class 文件时,我可以看到我的代码已更改为

if(obj==null)

我知道在 java 中 null==objobj==null 无关紧要。但我很好奇为什么编译器会更改它?

最佳答案

编译器没有改变任何东西。它忠实地将 if (null == obj)if (obj == null) 编译成不同的字节码,反编译器将其转换回相同的 Java 代码。

与右边的null比较,即

if (o == null) {
...
}

使用 ifnonnull 指令翻译成这个字节码:

0: aload_0
1: ifnonnull ...

与左边的null比较,即

if (null == o) {
...
}

使用 if_acmpne 指令转换为不同的字节码:

0: aconst_null
1: aload_0
2: if_acmpne ...

理论上,反编译器有足够的信息来确定参数在源文件中的排序方式。但是,他们为两个订单生成了相同的代码。

关于java - obj == null 与 null == obj,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47701336/

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