可以将具有推断类型的局部变量重新分配给其他类型吗?
我记得在某处读过带有推断类型的局部变量可以用相同类型的值重新分配,这是有意义的。
var x = 5; x = 1; // Should compile, no?
但是,我很好奇如果你要将x
重新分配给不同类型的对象会发生什么。 这样的东西还会编译吗?
var x = 5; x = new Scanner(System.in); // What happens?
我目前无法安装JDK 10的早期版本,并且不想等到明天才发现。
不会编译,抛出“不兼容的类型:扫描程序无法转换为int” 。 局部变量类型推断不会改变Java的静态类型性质。 换一种说法:
var x = 5; x = new Scanner(System.in);
只是语法糖:
int x = 5; x = new Scanner(System.in);
初始化var
变量后,您无法将其重新分配给其他类型,因为已经推断出类型。
所以,例如:
var x = 5; x = 1;
将编译为x
被推断为int
并将值1
重新分配给它也很好,因为它们是相同的类型。
另一方面,像:
var x = 5; x = "1";
将不会编译因为x
被推断为int
因此将string
x
将导致编译错误。
同样适用于您显示的Scanner
示例,它将无法编译。