最重要的区别是Kotlin
中的var
是关于可变性的,而Java
中的var
是关于类型推断的。
可选类型声明与无类型声明
// 如果声明一个可变变量同时对其进行初始化,则可以不显示的指定类型,也可以显示指定
var variable = 1
var variable : Int = 1
// 如果我们想声明一个变量但不直接初始化,则需要指定它的类型
var variable : Int
// 在Java中,只能在声明时即初始化变量的时候使用var,即使想显示指定类型也不可以
var variable = 1;
// 以下代码会报错
var variable;
variable = 1;
// 编译时错误: Cannot infer type: 'var' on variable without initializer
关键字与标识符
在 Kotlin
中,var
是一个关键字,这意味着我们不能将它用作变量、参数、方法或类的名称。而 Java 10
将var
定义为具有特殊含义的标识符。
这意味着在 Java 10
中,我们仍然可以定义一个名为var
的变量、参数或方法。
public void var() {
// ...
}
public void method(int var) {
// ...
}
public void method() {
int var = 1;
// ...
}
但请记住,从 Java 10
开始,但不能在类名或接口名中使用它
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
可变性
在Kotlin
中用var
声明的变量总是可变的,而在Java
中用var
声明的变量可以是可变的或final
的:
// Java 中用var声明的变量可以用final修饰
var mutableValue = 1;
final var immutableValue = 1;
// 在 Kotlin 中,没有final关键字,final变量用val来声明
val immutableValue = 1
全局和局部使用
在 Kotlin
中,我们可以使用var
来声明全局和局部变量,以及类成员:
var globalVar = 1
class MyClass {
var clzVar = 1
public fun myFunction() : Int {
var variable = 1
return variable
}
}
在 Java
中,我们只能使用var
来声明局部变量:
public class MyClass {
// 不可以用var声明类成员
public int myFunction() {
var variable = 1;
return variable;
}
}