请问Kotlin类Code A与Code B之间存在哪些差异?
Code A与Code B的核心差异
1. 变量i的作用域
- Code A:
i是伴生对象内部的成员变量,属于类级共享变量。所有My类的实例共用同一个i的存储空间,调用add()时会对同一个值进行累加操作。 - Code B:
companion object var i = 0的写法实际让i变成了每个实例的独立变量(该写法不符合Kotlin伴生对象的标准声明规范)。每个My实例都有自己的i副本,实例间的i值互不干扰。
2. 运行结果差异
- Code A:
a1.add():共享变量i从0累加为1,日志输出1a2.add():共享变量i从1累加为2,日志输出2
- Code B:
a1.add():a1实例的i从0变为1,日志输出1a2.add():a2实例的i从0变为1,日志输出1
3. 语法规范性
- Code A:是Kotlin声明伴生对象成员变量的标准写法,语法严谨清晰,符合官方规范。
- Code B:写法非标准,容易混淆伴生对象的作用。如果要声明实例独立变量,标准写法应为直接在类中定义
var i = 0,无需companion object修饰。
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

