我记得在某处读到,具有推断类型的局部变量可以用相同类型的值重新分配,这是有道理的。
var x = 5;
x = 1; // Should compile, no?
但是,我很好奇如果您要重新分配x
给不同类型的对象会发生什么。这样的东西还能编译吗?
var x = 5;
x = new Scanner(System.in); // What happens?
我目前无法安装 JDK 10 的早期版本,并且不想等到明天才能找到。
我记得在某处读到,具有推断类型的局部变量可以用相同类型的值重新分配,这是有道理的。
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
因此分配 astring
会x
导致编译错误。
这同样适用于Scanner
您展示的示例,它将无法编译。