Java 10 - 局部变量类型推断

JEP 286 - 局部变量类型推断

局部变量类型推断是 Java 10 以来最明显的语言变化之一。它允许使用 var 定义变量而不指定它的类型。编译器使用提供的值推断变量的类型。这种类型推断仅限于局部变量。

声明局部变量的旧方法。

String name = "Welcome to tutorialspoint.com";

声明局部变量的新方法。

var name = "Welcome to tutorialspoint.com";

现在,编译器通过检查提供的值将 name 变量的类型推断为 String。

值得注意的点

  • 成员变量、方法参数、返回值不进行类型推断。

  • 局部变量应在声明时初始化,否则编译器将无法推断并抛出错误。

  • 局部变量推断可在循环语句的初始化块内使用。

  • 没有运行时开销。由于编译器根据提供的值推断类型,因此不会有性能损失。

  • 没有动态类型变化。一旦推断出局部变量的类型,就无法更改。

  • 使用局部变量类型推断可以减少复杂的样板代码。

Map<Integer, String> mapNames = new HashMap<>();

var mapNames1 = new HashMap<Integer, String>();

例子

以下程序展示了 JAVA 10 中局部变量类型推断的使用。

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