前言
Java一直在逐步减少语法上的冗长。首先是Diamond操作符,现在是var(局部变量类型- JEP 286)来在Java中声明变量。
当我们使用var来声明变量时,不是声明一个变量类型,而是假设它的类型来自它被设置的值。如:
1 | var str = "Hello world"; |
在上面的例子中,在第一个语句中,我们将一个字符串设置为变量str,因此它被隐式地假定为字符串类型。第一个语句本质上等价于上面例子中的第二个语句。
正文
需要同时声明和初始化var
使用var时,必须在相同的位置初始化变量。
不能将声明和初始化放在不同的位置。
如果我们没有在适当的地方初始化变量,那么将会得到编译错误 - Cannot use 'var' on variable without initializer
。
1 | var i; //错误声明定义 - - Cannot use 'var' on variable without initializer |
var不是关键字
看起来像,但实际上var不是Java的关键字,所以我们可以命名叫var的变量,这是允许的。
1 | var var = 10; //正确 |
var用法
var的使用是有限制的,它可以应用在局部变量与初始化参数、for循环等,它不适用于方法参数、构造函数参数、方法返回类型、字段、捕获参数或任何其他类型的变量声明。
允许使用范围:
- 初始化的局部变量
- 增强for循环
- 普通for循环
1 | var blogName = "howtodoinjava.com"; |
不允许使用的范围:
- 方法参数
- 构造函数参数
- 方法返回类型
- 类字段
- 异常捕获参数或者其他类型的变量声明
1 | public class Application { |
var不是向后兼容的
由于这是一种新的语言特性,所以使用var编写的代码不会在较低的JDK版本(少于10)中编译。
所以,只有我们确定要使用它时,才建议使用。
var不影响性能
要知道,在Java中,类型不是在运行时推断的,而是在编译时推断的。这意味着生成的字节码与显式类型声明相同 - 它确实包含了关于类型的信息。这意味着在运行时没有进行额外的处理。
结语
以上就是关于var的全部内容。