Kotlin中的变量,与Java的差异:'var'与'val'?

时间:2017-05-25 10:24:51

标签: java android kotlin

我正在努力学习Kotlin。与Java相比,Kotlin中的valvarinternal是什么?

在Java中:

 RadioGroup radioGroup;
 RadioButton button;
 Button submit;

转换后显示:

 internal var radioGroup: RadioGroup
 internal var button: RadioButton
 internal var submit: Button

4 个答案:

答案 0 :(得分:29)

valvar是可用于声明变量(和属性)的两个关键字。不同之处在于使用val为您提供了只读变量,这与在Java中使用final关键字相同。

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

尽可能使用val是Kotlin中的约定,如果您知道自己将在某处更改其值,则应该只生成var

请参阅有关defining local variablesdeclaring properties的官方文档。

internal是一个在Java中不存在的可见性修饰符。它标记了一个类的成员,该类只在其所在的模块中可见。这与Java中默认package可见性的相似性(这就是转换器使用它的原因)转换成员package时的可见度)。但是,它并不完全相同。另请注意,它不是Kotlin中的默认可见性,Kotlin中的类及其成员默认为public

有关visiblity modifiers的文档中有更多内容。

答案 1 :(得分:11)

<error-page> <exception-type>javax.faces.application.ViewExpiredException</exception-type> <location>/Login.jsp</location> </error-page> :不可变数据变量

val:可变数据变量

将Java代码转换为Kotlin时:

  1. 转换器发现您没有初始化变量,所以它使它们成为var(可变),因为您稍后会对它们进行初始化。

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

  3. 有关varvar阅读this以及var阅读this的更多信息。

答案 2 :(得分:1)

val 用于声明最终变量。 val 变量的特征

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

enter image description here

var 是常规变量

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

    [{lateinit也用于全局变量,我们不能将其用于局部变量]

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

enter image description here

Kotlin中的

val 就像Java中的final关键字

答案 3 :(得分:1)

在kotlin中,我们可以用两种类型声明变量:valvarval无法重新分配,它用作最终变量。

val x = 2
x=3 // cannot be reassigned

另一方面,可以将var重新分配为可变的

var x = 2
x=3 // can be reassigned