swe*_*dev 32 java type-inference local-variables java-10
在阅读并讨论Java 10s新保留类型名称var
(JEP 286:局部变量类型推断)之后,讨论中出现了一个问题.
与文字一起使用时,如:
var number = 42;
Run Code Online (Sandbox Code Playgroud)
是number现在的int还是一个Integer?如果您只是将它与比较运算符一起使用或作为参数使用它通常无关紧要,这要归功于自动装箱和开箱.但由于Integer成员职能,它可能很重要.
那么哪个类型是由原var语int或类创建的Integer?
Eug*_*ene 31
var要求编译器根据初始化程序的类型和42is 的自然类型推断变量的类型int.所以number将是一个int.这就是JLS示例所说的:
var a = 1; // a has type 'int'
Run Code Online (Sandbox Code Playgroud)
如果它以任何其他方式工作,我会感到惊讶,当我写这样的东西时,我绝对期待一个原始的.
如果你需要一个var盒装原语,你可以这样做:
var x = (Integer) 10; // x is now an Integer
Run Code Online (Sandbox Code Playgroud)
我们来试试吧.使用jshell:
jshell> Integer boxed1 = 42000;
boxed1 ==> 42000
jshell> Integer boxed2 = 42000;
boxed2 ==> 42000
jshell> System.out.println(boxed1 == boxed2);
false
jshell> var infered1 = 42000;
infered1 ==> 42000
jshell> var infered2 = 42000;
infered2 ==> 42000
jshell> System.out.println(infered1 == infered2);
true
Run Code Online (Sandbox Code Playgroud)
在第一次比较中,两个变量不一样; 他们是不同的例子.然而,第二个比较是正确的,因此必须在这里引入一个int.
注意:要在家中尝试,请使用<-128,128之外的值.缓存该范围内的整数实例.
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |