可以将具有推断类型的局部变量重新分配给其他类型吗?

时间:2018-03-19 21:54:10

标签: java object variables type-inference java-10

我记得在某地读过带有推断类型的局部变量可以用相同类型的值重新分配,这是有意义的。

var x = 5;
x = 1; // Should compile, no?

但是,我很好奇如果你要将x重新分配给不同类型的对象会发生什么。这样的事情还会编译吗?

var x = 5;
x = new Scanner(System.in); // What happens?

我目前无法安装JDK 10的早期版本,也不想等到明天才知道。

2 个答案:

答案 0 :(得分:7)

不会编译,抛出“不兼容的类型:扫描程序无法转换为int”。局部变量类型推断不会改变Java的静态类型性质。换句话说:

var x = 5;
x = new Scanner(System.in);

只是语法糖:

int x = 5;
x = new Scanner(System.in);

答案 1 :(得分:3)

初始化var变量后,您无法将其重新分配给其他类型,因为已经推断出类型。

所以,例如:

var x = 5;
x = 1; 

将编译为x被推断为int并将值1重新分配给它也很好,因为它们属于同一类型。

另一方面,如:

var x = 5;
x = "1"; 

将无法编译,因为x被推断为int因此将string分配给x会导致编译错误。

同样适用于您展示的Scanner示例,它将无法编译。