局部变量类型推断是 Java 10 以后可用语言最明显的变化之一。它允许使用 var 定义变量而不指定它的类型。编译器使用提供的值推断变量的类型。这种类型推断仅限于局部变量。
声明局部变量的旧用法
String name = "Welcome to yiidian.com";
声明局部变量的新用法
var name = "Welcome to yiidian.com";
需要注意的事项
- 在成员变量、方法参数、返回值的情况下没有类型推断。
- 局部变量应在声明时初始化,否则编译器将无法推断并抛出错误。
- 局部变量推断在循环语句的初始化块中可用。
- 没有运行时开销。由于编译器根据提供的值推断类型,因此不会损失性能。
- 没有动态类型更改。一旦推断出局部变量的类型,它就无法更改。
- 使用局部变量类型推断可以减少复杂的样板代码。
Map<Integer, String> mapNames = new HashMap<>();
var mapNames1 = new HashMap<Integer, String>();
Java10 局部变量类型推断的示例
以下程序展示了 JAVA 10 中局部变量类型推断的使用。
package com.yiidian;
import java.util.List;
public class Tester {
public static void main(String[] args) {
var names = List.of("Julie", "Robert", "Chris", "Joseph");
for (var name : names) {
System.out.println(name);
}
System.out.println("");
for (var i = 0; i < names.size(); i++) {
System.out.println(names.get(i));
}
}
}
输出结果为:
Julie
Robert
Chris
Joseph
Julie
Robert
Chris
Joseph