Kotlin值与分配中的参考值

时间:2018-03-31 07:43:22

标签: 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中,作业中是否分配了参考文献,何时分配了副本?

  2. 如何确定何时进行分配?

  3. 官方文档中是否有详细内容?如果有,我找不到它。

  4. 提前致谢!

1 个答案:

答案 0 :(得分:2)

Similar to Java,Kotlin从不在任务中隐含地复制对象。变量始终保持对对象的引用,并且将表达式赋值给变量只会复制对象的引用,而不是对象本身。

在幕后,每个值都是基元(IntBooleanChar等)或参考。分配值时,结果可以是基元的副本,也可以是对同一对象的引用副本,这些副本永远不会导致被引用的对象被复制。

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

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