Java var定义基本数据类型变量实际类型问题(原始类型或包装类)

本文主要介绍Java中var定义基本数据类型变量情况,通过实例代码说明var推断变量的实际类型是原始类型或对应的包装类类型。

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)

推荐阅读
cjavapy编程之路首页