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
相关产品推荐
相关产品推荐

