1、var推断变量类型
相关示例:https://docs.oracle.com/javase/specs/jls/se10/html/jls-14.html#jls-14.4.1
var要求编译器从初始化器的类型推断变量的类型,42的自然类型是int,所以number是int:
var a = 1; // a 是 'int'
如果要改变推断出的类型:
var x = (Integer) 10; // x 现在是 Integer
2、代码说明
编译器处理var number = 42;
类似于int number = 42;
public void method(Integer i) {
System.out.print("Integer method");
}
public void method(int i) {
System.out.print("int method");
}
var n = 42; // n has type 'int'
method(n); // => "int method"
自动装箱:
只有一个方法时,会自动装箱
public void method(Integer i) {
System.out.print("Integer method");
}
var n = 42; // a has type 'int'
method(n); // => "Integer method"
3、用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
在第一次比较中,两个变量是不一样的;它们是不同的实例。然而,第二个比较是正确的,因此这里必须推断出一个int。
注意:要在家里尝试,请使用(-128,128)
之外的值。包装类缓存会缓存范围内的整数实例。参考:Java Integer包装类缓存(cache)