Swift的“隐式解包选项”与Java的整数“自动装箱”有何不同?

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.

关键是“隐式解包的选项”可能是零,但你最好小心,不要在预期非零引用时使用它们,对吧?

最佳答案

Is the idea of Swift’s “implicitly unwrapped optionals” the same as Java’s “autoboxing” of integers?

相同?不,这个声明太强了.在某些情况下,服务于类似的目的吗?是.

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

>将值类型(基元)转换为对象,以便它们可以存储在集合中,如ArrayList和HashMap.

>需要这种处理的唯一原语是byte,short,int,long,float,double,boolean和char.因此,为什么这些是具有自动框对象等价物的唯一类型. Java自动装箱仅限于这些类型,而在Swift中,Optionals适用于所有类型.
> Swift的本机集合可以存储值类型,因此不需要进行此转换.
> Foundation的集合只能存储指针.使用它们时,Swift通过自动将数字类型装入NSNumber对象,与Java类似.
> Swift的Optional是一个枚举,一个值类型,无论它是包装引用类型还是值类型.

>在不使用哨兵值的情况下允许可空性.即返回null而不是-1,Integer.MIN等.

>这就是Swift的Optionals所针对的.

点赞