You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中属性A与自定义get方法属性B功能是否完全相同?差异何在?

Kotlin属性A与自定义get实现的属性B差异分析

二者功能不完全一致,核心差异体现在计算时机、内存占用和值的更新逻辑上,具体区别如下:

1. 计算时机与内存存储

  • 属性A:在类实例化时执行一次x * y计算,结果会被缓存到类的隐藏字段中。后续每次访问A都是直接读取这个缓存值,不会重复计算。
  • 属性B:没有对应的存储字段,每次访问B时都会触发getter方法,重新执行x * y的计算逻辑,不会缓存结果。

2. 值的更新逻辑

  • 若x或y是可变属性(var声明),A的值只会在实例初始化时固定,后续修改x/y不会改变A的结果;而B每次访问都会基于最新的x和y计算,能实时反映变量的变化。
  • 你提供的示例中x和y是只读的val,所以每次访问结果看起来相同,但底层执行逻辑完全不同。

直观验证代码

class MyClass(var x: Int, var y: Int) {
    val A = x * y
    val B: Int
        get() = x * y
}

fun main() {
    val obj = MyClass(2, 3)
    println(obj.A) // 输出6
    println(obj.B) // 输出6
    
    obj.x = 4
    println(obj.A) // 依旧输出6,初始化时已固定值
    println(obj.B) // 输出12,基于最新x计算
}

内容的提问来源于stack exchange,提问作者Marios Plenchidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:55:21