当前位置: 首页 > 知识库问答 >
问题:

允许空值装箱,那么为什么不允许取消装箱?

淳于开畅
2023-03-14

我正在阅读jls§5.1.7,它说有9种拳击类型,第9种是拳击从空类型到空类型

然后我读到null的拆箱转换会抛出一个NullPointerExc的。好的,这很明显。那么为什么null的装箱不会抛出一个NullPointerExc的以及装箱null值有什么用呢?

共有2个答案

周承天
2023-03-14

我想你提供的医生会给出答案。此规则是必要的,因为条件运算符将装箱转换应用于其操作数的类型,并在进一步的计算中使用结果

如果 ?: 的第二个和第三个操作数之一不是布尔表达式或数值表达式,则可以使用装箱。例如,true?1:2 的类型是 int,而 true?null:1 的类型是整数在第二个示例中,采用自动装箱。在运行时,第二个示例的类型将是 null 类型,因为当装箱 null 类型时,将获得 null 类型。

景元徽
2023-03-14

将<code>null</code>转换为Integer不会引发<code>NullPointerException</code>,因为<code>null</code>对于任何引用都是有效的值,例如:<code>Integer intObject=null;//精细

但是,您不能这样做:

int intPrimitive=intObject;//不好

因为当您尝试将整数转换为 int 时,会在后台调用 Integer.intValue(),但是在空引用上调用任何方法都会抛出 NPE:

Object whatever = null;
whatever.anyMethod(); // always throws NPE

因为引用指向 null,而不是所选类型的实际对象。

 类似资料:
  • 问题内容: 如JDK文档中所指定,Hashtable不允许空键或值。HashMap允许一个null键和任意数量的null值。为什么是这样? 问题答案: Hashtable是较老的类,通常不鼓励使用Hashtable。也许他们看到了对null键的需求,更重要的是对null值的需求,并将其添加到HashMap实现中。 HashMap是较新的,并且具有更高级的功能,这些基本上只是对Hashtable功能

  • 在Java9中,为、和接口引入了新的工厂方法。这些方法允许在一行中快速实例化具有值的Map对象。现在,如果我们考虑: 以上内容是允许的,没有任何例外,如果我们这样做: 我知道HashMap可以将null作为键和值,但为什么在Map.of的情况下会受到限制呢? 同样的情况也发生在和中。

  • 问题内容: W3指定表列(带有元素)仅允许使用四个CSS规则- 边框,背景,宽度和可见性。 有人知道这个决定的原因吗?如果可以使用边框和背景,为什么不使用字体和颜色呢? 问题答案: IanHixie在这里详细解释:为什么只有四个属性应用于表列的奥秘。相关报价: 文本的颜色取决于其元素的“颜色”属性。除非指定,否则“ color”属性(基本上)默认为“ inherit”,这意味着“采用父元素的值”。

  • 问题内容: 我读了这个问题,并认为如果可以写的话,很容易解决(不是没有它就不能解决): 我不确定在很多情况下它是否有用,但是我想知道为什么它没有用,以及其他语言中是否存在类似的东西。 你们有什么感想? 编辑: 澄清一下:是的,我知道,这在Java中是不可能的,我也不是很想念它。这不是我期望的工作,并且惊讶于出现编译器错误。我只是有这个主意,喜欢讨论它。 问题答案: 它违反了封装。你不应该能够绕过父

  • 其中map类型为,但我的测试在编译时失败: 为什么JUnit(或Hamcrest)不能确定使用哪个匹配器?

  • 问题内容: 我想知道Java中是否有特殊原因总是使用“ ”而不是“ ”来定义类型参数的界限。 例: 被禁止但是 是正确的。是什么原因呢? 问题答案: 在类“实现”还是“扩展”之间,通用约束语言没有语义差异。约束可能性是“扩展”和“超级”-也就是说,该类是可分配给其他类的对象(扩展),还是该类可从该类分配(超级)。