Kotlin 中 [val] 和 [const val] 的区别(转 Java 对比)


在 Kotlin 中,valconst val 都用于声明不可变的变量,但它们的行为和使用场景有明显差异。下面是它们的区别以及如何转换成 Java 的写法。


一、Kotlin [val]

✅ 含义:

运行时只读变量。

📌 特点:

  • 在运行时赋值。
  • 可以是类属性、局部变量等。
  • 不是编译时常量。
  • 不会被内联。

示例 Kotlin:

val PI = 3.1415

object Config {
    val VERSION = "1.0.0"
}

等价 Java 写法:

public final double PI = 3.1415;

如果是对象中的属性:

public final class Config {
    private static final String VERSION = "1.0.0";

    public static final Config INSTANCE = new Config();

    private Config() {}

    public final String getVERSION() {
        return VERSION;
    }
}

二、Kotlin const val

✅ 含义:

编译期常量(compile-time constant)。

📌 特点:

  • 必须在编译期确定值。
  • 只能在顶层或 object 中声明。
  • 类型只能是基本类型或 String
  • 被内联到调用处。

示例 Kotlin:

const val APP_NAME = "MyApp"

object Config {
    const val MAX_RETRY = 3
}

等价 Java 写法:

public static final String APP_NAME = "MyApp";

如果是对象中的属性:

public final class Config {
    private static final int MAX_RETRY = 3;

    public static final Config INSTANCE = new Config();

    private Config() {}

    public final int getMAX_RETRY() {
        return MAX_RETRY;
    }
}

但在调用处可能直接被替换为字面值:

System.out.println(3); // 内联效果

三、对比总结表

特性 [val] const val
是否编译时常量 ❌ 否 ✅ 是
初始化时机 运行时 编译时
支持类型 所有类型 基本类型、String
使用位置 可在类中、函数中等 必须是 top-level 或 object
是否被内联 ❌ 否 ✅ 是
Java 等价写法 final 字段 public static final 字段

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。