在使用var的循环中键入推断

imp*_*ssv 2 java java-10

一般来说,我知道Java中的工作类型推断.但是我很好奇当你使用JDK 10新功能var时它在循环中是如何工作的 .

我的意思是我可以用这种方式编写循环

for(var i=0; i<100; i++) {
//something to do
}
Run Code Online (Sandbox Code Playgroud)

编译器如何推断应该有一个int而不是long?

Kay*_*man 11

因为0是int文字.0L是一个long文字.

true是boolean文字,"true"是String文字.编译器处理像这样的简单情况没有问题.

  • @implssv没有`byte`或`short`字面.你必须写`var i =(byte)0`来使用`byte`.你可以写`byte b = 0;`因为`0`是一个编译时常量,编译器可以确定它适合一个字节.(这称为[缩小原语转换](https://docs.oracle.com/javase/specs/jls/se9/html/jls-5.html#jls-5.1.3)). (11认同)
  • @AndyTurner此外,"0"是一个"int"字面的事实由JLS的§15.8.1涵盖. (2认同)