Java中int可赋值给包装类的原因及指定代码的合法性与作用
Java基本类型与包装类的自动装箱/拆箱问题解答
问题1:int类型为何可以赋值给Java包装类?
其实这得益于Java 5开始引入的**自动装箱(Autoboxing)**特性,说白了就是编译器悄悄帮你完成了原本需要手动编写的类型转换工作。
当你写下类似Integer num = 10;这样的代码时,编译器会自动把它转换成:
Integer num = Integer.valueOf(10);
它会调用包装类的valueOf()静态方法,把基本类型int转换成对应的Integer对象,这样就实现了基本类型到包装类的赋值,不用你手动去new对象或者调用转换方法,大大简化了代码。
问题2:代码int i = new Integer(5);为何合法,具体实现了什么功能?
这正好是上面自动装箱的反向操作——自动拆箱(Unboxing),同样是Java 5之后才支持的特性。
当你把一个Integer对象直接赋值给int类型变量时,编译器会自动帮你调用包装类的拆箱方法,把代码转换成:
int i = new Integer(5).intValue();
它会调用Integer对象的intValue()方法,取出对象内部存储的基本类型int值,然后赋值给变量i。在Java 5之前,你必须手动调用intValue()才能完成这个转换,现在编译器帮你做了这个步骤,所以这段代码是合法的,功能就是把Integer对象转换成对应的int基本类型值并赋值给变量i。
内容的提问来源于stack exchange,提问作者Henry Li
相关产品推荐
相关产品推荐

