💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Java `var` – 局部变量类型推断 > 原文: [https://howtodoinjava.com/java10/var-local-variable-type-inference/](https://howtodoinjava.com/java10/var-local-variable-type-inference/) Java 一直在努力减少语法的冗长性。 首先是[菱形运算符](https://howtodoinjava.com/java-7/improved-type-inference-in-java-7/),现在是`var`(局部变量类型 – [JEP 286](https://openjdk.java.net/jeps/286))在 Java 中声明变量。 当您使用`var`声明变量时,基本上,而不是声明变量类型,而是根据设置的类型假定其类型。 例如 ```java var str = "Hello world"; //or String str = "Hello world"; ``` 在上面的示例中,在第一个语句中,您将`String`设置为变量`str`,因此隐式假定其为`String`类型。 在上面的示例中,第一条语句基本上等同于第二条语句。 ## `var`同时声明和初始化 使用`var`时,必须在同一位置初始化变量。 您不能将声明和初始化放在不同的位置。 如果未在适当位置初始化变量,则会出现编译错误 – `Cannot use 'var' on variable without initializer`。 ```java var i; //Invalid Declaration - - Cannot use 'var' on variable without initializer var j = 10; //Valid Declaration System.out.println(i); ``` ## `var`不是关键字 虽然看起来像`var`并不是**保留的 Java 关键字**。 因此,您可以创建名称为`var`的变量,允许使用。 ```java var var = 10; //Valid Declaration int var = 10; //Also valid Declaration ``` ## `var`用法 使用`var`仅限于具有初始化器的局部变量,增强的`for`循环中的索引以及在传统的`for`循环中声明的局部变量; 它不适用于方法形式,构造器形式,方法返回类型,字段,`catch`形式或任何其他类型的变量声明。 #### 用法如下: * 带有初始化器的局部变量 * 增强的`for`循环中的索引 * 在传统的`for`循环中声明的局部变量 ```java var blogName = "howtodoinjava.com"; for ( var object : dataList){ System.out.println( object ); } for ( var i = 0 ; i < dataList.size(); i++ ){ System.out.println( dataList.get(i) ); } ``` #### 不允许的用法如下: * 方法参数 * 构造器参数 * 方法返回类型 * 类字段 * 捕获形式(或任何其他类型的变量声明) ```java public class Application { //var firstName; //Not allowed as class fields //public Application(var param){ //Not allowed as parameter //} /*try{ } catch(var ex){ //Not allowed as catch formal }*/ /*public var demoMethod(){ //Not allowed in method return type return null; }*/ /*public Integer demoMethod2( var input ){ //Not allowed in method parameters return null; }*/ } ``` ## `var`不向后兼容 由于这是新的语言特性,使用`var`编写的代码将不会在较低的 JDK 版本(小于 10)中编译。 因此,只有在确定时才使用此特性。 ## `var`不会影响性能 请记住,在 Java 中,类型不是在运行时推断的,而是在编译时推断的。 这意味着生成的字节码与显式类型声明相同 – 它确实包含有关类型的信息。 这意味着在运行时无需额外的处理。 学习愉快!