Java 10中用var声明字面量变量,类型为基本类型还是包装类?
Java 10 var推断字面量类型:int还是Integer?
好问题!这个点确实容易因为自动装箱拆箱的特性产生混淆,我直接给你明确结论:
当你写var number = 42;时,number的类型是基本类型int,而非包装类Integer。
为什么会这样?
Java的var是基于右侧初始化表达式的编译时实际类型来推断变量类型的。在Java语法里,整数字面量42默认就是int类型的基本类型字面量,所以var会直接把变量推断为int。
怎么验证?
你可以尝试调用只有包装类才有的方法,比如getClass():
var number = 42; System.out.println(number.getClass()); // 编译报错!因为int是基本类型,没有成员方法
如果换成明确的包装类初始化,就不会报错:
var number = Integer.valueOf(42); System.out.println(number.getClass()); // 输出class java.lang.Integer
那什么时候会推断为Integer?
如果你想让var推断出Integer类型,需要让右侧表达式的类型明确是包装类:
- 用
Integer.valueOf()显式创建:var number = Integer.valueOf(42); - 显式强制类型转换:
var number = (Integer)42; - 或者从一个返回Integer的方法/变量赋值:
Integer temp = 42; var number = temp;
关于自动装箱的补充
虽然平时用==或者作为参数传递时,自动装箱拆箱会让int和Integer看起来没区别,但本质上变量的原始类型还是int,只有在需要的时候Java才会自动把它装箱成Integer对象——这是后续的隐式操作,不影响var最初推断的类型。
内容的提问来源于stack exchange,提问作者sweisgerber.dev
相关产品推荐
相关产品推荐

