class - Kotlin 值与赋值中的引用

标签 class oop object reference kotlin

我需要一个类引用另一个类。不创建它的副本,但实际引用已经存在的实例。

我也许可以用一个例子更好地解释它。如果我们有一个类 Image:

class Image(imgPath: String) {
    val height   : Int
    val width    : Int
    val rgbMatrix: MutableList< MutableList< Triple<Int, Int, Int> > >

    /* ... etc. ... */
}

现在说我想要一个类 ImageManager,它只引用一个已经存在的 Image:

class ImageManager(val img: Image) {
   /* ... */
}

所以我可以有这种行为:

val image = Image("/res/images/image.png")

val imageManager = ImageManager(image)

// Setting the pixel at (125, 25) to black
imageManager.img.rgbMatrix[125, 25] = Triple(0, 0, 0)

// Should print the update value(0, 0, 0)
print( image.rgbMatrix[125, 25] )

我的问题是:

  1. 在 Kotlin 中,in assignment 何时分配引用,何时分配副本?

  2. 我如何确定什么时候发生的分配?

  3. 官方文档中有详细说明吗?如果有我找不到。

提前致谢!

最佳答案

Similar to Java , Kotlin 从不隐式复制对象赋值。变量总是保存对对象的引用,将表达式分配给变量只会复制对对象的引用,而不是对象本身。

在底层,每个值要么是一个原始值(IntBooleanChar 等),要么是一个引用。赋值时,结果要么是原语的副本,要么是对同一对象的引用的副本,这永远不会导致被引用的对象被复制。

据我所知,这种行为没有明确记录;相反,假定它与 Java 中的相同。

另请参阅:Is Kotlin “pass-by-value” or “pass-by-reference”?

关于class - Kotlin 值与赋值中的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49585498/

相关文章:

java - 第二条记录未存储在数组列表中

尝试读取枚举状态时出现 C++ 枚举错误

C++ 错误没有匹配的调用函数

python - 为什么两个类实例似乎共享相同的数据?

Java - 不使用直接字段名称访问对象的属性

c++ - c++中继承两个类的一个类

java - oop 接口(interface)实现以及抽象类

php - 如何访问命名空间的php对象?

C# 将对象列表中的对象转换为类型返回左手签名必须是变量错误

c# - 避免处理函数的长 switch/if