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



Swift的">隐式展开选项"的想法与Java的整数">autoboxing的想法相同吗?只有当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.

重点是"隐式展开的期权"可以为零,但你最好小心,不要在预期非零引用时使用它们,对吧?

Swift的"隐式展开选项"的想法与Java的整数"自动装箱"相同吗?

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

Java中使用Autoboxing有两个主要原因:

  1. 将值类型(基元(转换为对象,以便将它们存储在集合中,如ArrayListHashMap

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

    • 这就是Swift的期权的作用

最新更新