gpt4 book ai didi

java - Swift 的 "implicitly unwrapped optionals"与 Java 的整数 "autoboxing"有何不同?

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:38 25 4
gpt4 key购买 nike

Swift 的“隐式解包选项”的思想是否与 Java 的整数“自动装箱”相同?以下运行时异常只有在 xObj 被声明为“隐式解包选项”时才会在 Swift 中出现:

Integer xObj = new Integer(-1);  
xObj = null; // could do this with an implicitly unwrapped optional as well.
Integer.valueOf(xObj); // <-- exception. Integer.valueOf(int x); couldn't deal with this.

关键是“隐式展开的可选值”可以是 nil,但你最好小心,不要在预期非 nil 引用时使用它们,对吗?

最佳答案

Is the idea of Swift's "implicitly unwrapped optionals" the same as Java's "autoboxing" of integers?

相同?不,这是一个过于强烈的声明。 在某些情况下有类似的目的吗?是的。

在 Java 中使用自动装箱有两个主要原因:

  1. 将值类型(原语)转换为对象,以便它们可以存储在集合中,例如 ArrayListHashMap

    • 唯一需要这种处理的基元是byteshortintlong floatdoublebooleanchar。因此,为什么这些是唯一具有自动装箱对象等价物的类型。 Java 自动装箱仅限于这些类型,而在 Swift 中,Optionals 适用于所有类型。
    • Swift 的原生集合可以存储值类型,因此不需要进行这种转换。
    • Foundation 的集合只能存储指针。在使用它们时,Swift 会做与 Java 类似的事情,即自动将数字类型装箱到 NSNumber 对象中。
    • Swift 的 Optional 是一个枚举,一个值类型,无论它包装的是引用类型还是值类型。
  2. 允许在不使用标记值的情况下为空。 IE。返回 null 而不是 -1Integer.MIN

    • 这就是 Swift 的 Optional 的用途。

关于java - Swift 的 "implicitly unwrapped optionals"与 Java 的整数 "autoboxing"有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38819130/

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