Kotlin中的变量,与Java有何不同?'var'和'val'区别是什么?

22

我正在学习Kotlin。在Kotlin中,valvarinternal相比Java有何不同?

在Java中:

 RadioGroup radioGroup;
 RadioButton button;
 Button submit;

转换后显示:

 internal var radioGroup: RadioGroup
 internal var button: RadioButton
 internal var submit: Button
4个回答

40

valvar是你可以用来声明变量(和属性)的两个关键字。区别在于使用val会给你一个只读变量,这与Java中使用final关键字相同。

var x = 10    // int x = 10;
val y = 25    // final int y = 25;

在 Kotlin 中,约定俗成的做法是尽可能使用 val,只有在确定某个值需要更改时才将其声明为 var

有关定义局部变量声明属性,请参阅官方文档。


internal 是一种可见性修饰符,在 Java 中不存在。它标记了类的成员仅在所在模块内可见。这与 Java 中默认的 package 可见性相似(因此,当转换具有 package 可见性的成员时,转换器会使用它)。但是,这并不完全相同。请注意,这不是 Kotlin 的默认可见性修饰符,Kotlin 中的类及其成员默认为 public

有关可见性修饰符,请参阅文档。


只是补充一下,Kotlin社区建议使用不可变性,除非你有充分的理由使用可变变量。不需要跟踪不可变变量的状态。 - Gangadhar Lahane
val 更像是一个 final 修饰符。 - Alston
我认为值对象带有var字段仍然可以在其var字段中进行修改,这一点值得一提 -> https://dev59.com/oFcP5IYBdhLWcg3wkKtD#44200189至少对于我来说,从C++和const过来,这非常令人惊讶。 - Antonio

14

val :不可变数据变量

var :可变数据变量

当您将Java代码转换为Kotlin时:

  1. 转换器发现您尚未初始化变量,因此它将它们设置为var(可变的),因为您稍后会初始化它们。

  2. 可能您的变量未使用,因此转换器使它们变为内部变量,猜测您不会在包外使用它们。

有关varvar的更多信息,请阅读此处,有关internal的更多信息,请阅读此处


1

val 用于声明不可变变量。 val 变量的特点:

  1. 必须初始化
  2. 值不能被更改或重新赋值

enter image description here

var是一个通用的变量

  1. 我们可以使用lateinit修饰符稍后初始化

    [lateinit也用于全局变量,但不能用于局部变量]

  2. 值可以被更改或重新分配,但不在全局范围内

enter image description here

val在Kotlin中类似于Java中的final关键字


1
在Kotlin中,我们可以声明两种类型的变量:valvarval不能被重新赋值,它作为一个最终变量。
val x = 2
x=3 // cannot be reassigned

另一方面,变量可以被重新赋值,它是可变的。
var x = 2
x=3 // can be reassigned

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接