为什么会有这种类型转换

2021-01-25 10:15:47 +08:00
 anzu
    private static Integer getInteger() {
        return null;
    }

    public static void main(String[] args) {
        boolean condition = false;
        // error: null pointer exception
        Integer i = condition ? 1 : getInteger();
        if (Objects.equals(i, 1)) {
            System.out.println("i == 1");
        } else {
            System.out.println("i == null");
        }
    }

为什么是 getInteger() 返回值退化成 int 而不是 1 提升为 Integer ?

1663 次点击
所在节点    Java
4 条回复
mgzu
2021-01-25 10:46:13 +08:00
用 JD-GUI 看到的反编译结果是
Integer i = Integer.valueOf(condition ? 1 : getInteger().intValue())
AoEiuV020
2021-01-25 11:25:33 +08:00
还真没注意过这情况,确实有点不友好,出来本来可以避免的空指针,
不过从一开始我记得的就是 Integer 参与运算会拆箱,int 参与泛型会装箱,
倒是没有违反我的记忆,
Bronya
2021-01-25 15:35:31 +08:00
楼主你发的链接里,bnp(..) T | bnp(..) lub(..) 分别是什么意思呀?
~~翻译了一下没看太明白🤪~~
AoEiuV020
2021-01-25 20:23:59 +08:00
啊这,有点宁信度了,代码都跑过了,确实是拆箱,那设计上当然就是拆箱,白皮书当然写着拆箱,不看出知道吧,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748043

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX