V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
marine2c
V2EX  ›  程序员

Java 自动装箱问题求助

  •  
  •   marine2c · Apr 28, 2021 · 2349 views
    This topic created in 1825 days ago, the information mentioned may be changed or developed.

    Integer skillId = Objects.nonNull(classifyResponse) ? classifyResponse.getSkillId() : 0; getSkillId 返回一个 Integer 对象,为空就会报空指针异常,但是我?后面直接写 null 就不会报异常为什么? java8 版本。

    8 replies    2021-05-06 15:12:44 +08:00
    geelaw
        1
    geelaw  
       Apr 28, 2021 via iPhone
    https://www.v2ex.com/t/655007 #8 非常猥琐的自动拆箱
    dqzcwxb
        2
    dqzcwxb  
       Apr 28, 2021
    marine2c
        3
    marine2c  
    OP
       Apr 28, 2021 via iPhone
    @geelaw
    @dqzcwxb
    感谢各位老哥科普,我之前就是写 c#转过来的,java 这就很离谱😤
    anzu
        4
    anzu  
       Apr 28, 2021
    根据下面的表格,你的 Conditional expression type 是 int
    https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25
    xuanbg
        5
    xuanbg  
       Apr 29, 2021
    Java 三元表达式的冒号两边一定要使用相同类型,否则就会闹幺蛾子。。。

    C#你没发现根本不允许你这么写吗?如果冒号两边一个可为空一个不可为空,vs 会提示你需要类型转换。
    geelaw
        6
    geelaw  
       Apr 29, 2021 via iPhone
    @xuanbg #5 C# 表达式 true ? (int)0 : (int?)null 合法,所以不理解最后一句是什么。

    当然 C# 里严格来说没有类似的场景,因为 C# 无法表达装箱过的值类型,即不存在 Integer 对应的东西。
    DAM
        7
    DAM  
       Apr 29, 2021
    Java8 就要多用新特性
    Integer skillId = Optional.ofNullable(classifyResponse).map(ClassifyResponse::getSkillId).orElse(0);
    zm8m93Q1e5otOC69
        8
    zm8m93Q1e5otOC69  
       May 6, 2021
    三目运算会自动拆箱。。统一一下类型,用 Integer 包裹一下后面的 0
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3711 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 04:43 · PVG 12:43 · LAX 21:43 · JFK 00:43
    ♥ Do have faith in what you're doing.