Java10之后的一个重要变化是引入了var
关键字,在Kotlin中我们对它已经很熟悉了,那么Java中的var
和Kotlin有哪些不同呢?
1. 声明初始化
Kotlin
kotlin中我们声明同时初始化时,可以省略变量类型,当然也可以不省略
//省略
var myVariable = 1
//不省略
var myVariable : Int = 1
当我们声明和初始化分开时,必行指定类型
var myVariable : Int //不可省略
...
myVariable = 1
Java
Java是类型声明前置的,var
和变量类型
不能同时存在,因此只有声明的同时初始化才能使用var
var myVariable = 1; //ok
var myVariable; //ng
myVariable = 1;
2. 关键字与标识符
Kotlin的var
是关键字(keyword),而Java的var
只是一个标识符(Identifier)。
关键字不允许作为变量/方法名存在,而标识符允许,所以Java中以下代码没问题(至少目前是这样的)
public void var() {
// do something
}
public void method(int var) {
// do something
}
public void method() {
int var = 1;
// do something
}
但是需要特别注意,var
不能用来定义一个class
public static class var {
}
以上代码会报编译错误
Error:(1, 1) java: 'var' not allowed here
as of release 10, 'var' is a restricted type name and cannot be used for type declarations
3. 可变性
Kotlin的var
意味着可变,但是Java的var
没有任何可变性上的语义,可变性通过final来控制
//Kotlin的immutable
val immutableInt = 1
//Java
var mutableInt = 1; //mutable
final var immutableInt = 1; //immutable
4. 作用域
Kotlin
Kotlin中var
变量允许存在于top-level
var myGlobalVar = 3
class MyClass {
var myVar = 3
public fun myFunction() : Int {
var myVariable = 3
return myVariable
}
}
Java
Java中var
变量只能是局部变量,作为类的成员变量也是不允许的
public class MyClass {
//not possible for member variables
//private var myVar = 1;
public int myFunction() {
var myVariable = 3;
return myVariable;
}
}
5. 总结
通过比较我们能感受到,var
在Java和Kotlin中的功能定位不同,Kotlin的var
主要用于可变性的声明,而Java的var
只是一个类型推到的语法糖。这两者除了name一样以外,其实并没什么可比性。