java在原语或原语包装类中使用带有文本的var会产生什么结果?
在阅读并讨论了Java 10s新的保留类型名称之后,var
({a1})讨论中出现了一个问题
将其与文本一起使用时,如:
var number = 42;
number
现在是int
还是Integer
?如果您只是将其与比较运算符一起使用,或者将其用作参数,则由于自动装箱和-取消装箱,这通常并不重要。
但是由于Integer
的成员功能,它可能会影响
那么哪种类型是由var
、原语int
或类Integer
创建的呢
# 1 楼答案
根据14.4.1中的proposed specification changes局部变量声明器和类型:
换句话说,局部变量的推断类型是初始值设定项表达式作为独立表达式使用时的类型
42
作为一个独立表达式,其类型为int
,因此,变量number
的类型为int
向上投影是规范变更中定义的术语,不适用于此类简单情况
# 2 楼答案
var
要求编译器根据初始值设定项的类型推断变量的类型,42
的自然类型为int
。所以number
将是一个int
。这就是JLS example says所说的:如果它以任何其他方式工作,我会感到惊讶,当我写这样的东西时,我肯定希望有一个原始的
如果需要
var
作为装箱原语,可以执行以下操作:# 3 楼答案
编译器对
var number = 42;
的处理类似于int number = 42;
并在以下情况下自动装箱:
# 4 楼答案
让我们测试一下。使用jshell:
在第一次比较中,两个变量不一样;它们是不同的例子。然而,第二个比较是正确的,因此这里必须推断出一个int
注意:要在家中试用,请使用外部值<-128, 128). 缓存该范围内的整数实例