编译时常量:
首先我觉得应该说明:编译时常量并不是Kotlin独有,在Java或者说其他语言中同样存在编译时常量。
const val c = 112;
fun main() {
val b: Char = '1'
val a: Int = b.code
println(c)
}
Kotlin中的编译时常量需要使用const val
修饰,并且在函数之外定义。
知道Kotlin中怎么写编译时常量之后,下面我们可以仔细了解一下编译时常量这个概念。
- 编译期常量指的就是程序在编译时就能确定这个常量的具体值。
- 非编译期常量就是程序在运行时才能确定常量的值,因此也称为运行时常量。
Java中的编译时常量:
在Java中,编译期常量指的是用final关键字修饰的基本类型或String类型并直接赋值(非复杂运算)的变量(无论是否用static修饰),是编译器的一种优化,体现在字节码文件中;运行是常量是由运行时解释器解释完成的。
public class ConstantTest {
public final int a = 1; //编译时常量
public final int b = 1+2; //编译时常量 支持加减乘除等简单运算
public final int c = b+3; //编译时常量
public final static int d = 10; //编译时常量
public final String str1 = "abc"; //编译时常量
public final String str2 = "def" + "ghi"; //编译时常量 支持字符串的连接
public final String str3 = str2 + "jkl"; //编译时常量
public final static String str4 = "static str"; //编译时常量
public final double e = Math.random(); //运行时常量
public final ConstantTest test = new ConstantTest(); //运行时常量
}
在Java中,虽然编译时常量并不依托于类,但是我们还是写在类里面。在Kotlin里,我们编译时常量的定义在函数之外。另外提一句:java中的方法和Kotlin的函数其实是一个东西。