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

Jac*_* G. 4 java variables type-inference object java-10

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

var x = 5;
x = 1; // Should compile, no?
Run Code Online (Sandbox Code Playgroud)

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

var x = 5;
x = new Scanner(System.in); // What happens?
Run Code Online (Sandbox Code Playgroud)

我目前无法安装JDK 10的早期版本,并且不想等到明天才能找到答案.

man*_*uti 7

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

var x = 5;
x = new Scanner(System.in);
Run Code Online (Sandbox Code Playgroud)

只是语法糖:

int x = 5;
x = new Scanner(System.in);
Run Code Online (Sandbox Code Playgroud)

  • @manouti这里有一个跟随的问题/sf/ask/3458765761/​​ference虽然这确实是语法糖,*类型*var可以由编译器推断,并且编译器可以推断出我们无法声明的类型 (2认同)