“句子”和“句子”有什么区别?和“val" ?

我最近读到const关键字,我很困惑!我找不到constval关键字之间的任何区别,我的意思是我们可以使用它们来创建一个不可变变量,还有什么我遗漏的吗?

97159 次浏览

consts是编译时常量。这意味着它们的值必须在编译时赋值,而不像__abc1那样可以在运行时赋值。

这意味着,consts永远不能被赋值给函数或任何类构造函数,而只能赋值给String或原语。

例如:

const val foo = complexFunctionCall()   //Not okay
val fooVal = complexFunctionCall()  //Okay


const val bar = "Hello world"           //Also okay

再补充一下卢卡的回答:

编译时常量

在编译时已知值的属性可以使用const修饰符标记为编译时常量。这些属性需要满足以下要求:

  • 对象声明伴星的顶级或成员。
  • 初始化为String类型或基本类型的值
  • 没有自定义getter

这些属性可以在注释中使用。

来源:官方文档

可以将Kotlin转换为Java。 然后你可以看到常量瓦尔多一个静态修饰符。

芬兰湾的科特林:

const val str = "hello"
class SimplePerson(val name: String, var age: Int)

Java(部分):

@NotNull
public static final String str = "hello";


public final class SimplePerson {
@NotNull
private final String name;
private int age;


@NotNull
public final String getName() {
return this.name;
}


public final int getAge() {
return this.age;
}


public final void setAge(int var1) {
this.age = var1;
}


public SimplePerson(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.age = age;
}
}

const kotlin到Java

const val Car_1 = "BUGATTI" // final static String Car_1 = "BUGATTI";

val kotlin致爪哇

val Car_1 = "BUGATTI"   // final String Car_1 = "BUGATTI";

简单地说

  1. const变量的值在编译时已知。
  2. val的值用于在运行时定义常量。

示例1 -

const val Car_1 = "BUGATTI" ✔
val Car_2 = getCar() ✔
const val Car_3 = getCar() ❌


//Because the function will not get executed at the compile time so it will through error


fun getCar(): String {
return "BUGATTI"
}

这是因为getCar()在运行时被求值并将值赋给Car。

此外,

  1. 瓦尔是只读的意思是不可变的,在运行时已知
  2. var是在运行时已知的可变的
  3. 常量是不可变的,是编译时已知的变量

valconst都是不可变的。

const用于声明编译时常量,而val用于声明运行时常量。

const val VENDOR_NAME = "Kifayat Pashteen"  // Assignment done at compile-time


val PICon = getIP()  // Assignment done at run-time

瓦尔

与Kotlin var关键字相比,Kotlin val关键字用于只读属性。read-only属性的另一个名称是immutable

芬兰湾的科特林代码:

val variation: Long = 100L

Java的等效代码如下所示:

final Long variation = 100L;

< br >

const瓦尔

我们也对不可变属性使用const关键字。const用于编译时已知的属性。这就是区别。考虑到const属性必须声明为globally

Kotlin代码(游乐场):

const val WEBSITE_NAME: String = "Google"


fun main() {
println(WEBSITE_NAME)
}

Java代码(在操场):

class Playground {


final static String WEBSITE_NAME = "Google";


public static void main(String[ ] args) {
System.out.println(WEBSITE_NAME);
}
}

对于那些正在寻找valconst之间哪个更合适或更有效的人:

对于String或任何基元数据类型,建议使用const val而不是val。因为val在运行时是已知的,所以当你的应用程序运行时,它会处理所有的值。另一方面,const val将在编译时提前执行此操作。因此,性能方面const val将给出更好的结果。

因为我读了很多书,所以“瓦尔”;意思是不可变的:这绝对不是这样的,看看这个例子:

class Test {
var x: Int = 2
val y
get() = x
}


fun main(args: Array<String>) {
val test = Test()
println("test.y = ${test.y}") // prints 2
test.x = 4
println("test.y = ${test.y}") // prints 4
}

遗憾的是,真正的不可变性目前只能通过const -实现,但这只能在编译时实现。在运行时,你不能创建真正的不变性。

val只是表示“readonly"”,你不能直接改变这个变量,只能像我在上面的例子中显示的那样间接改变。