我需要另一个类引用。不创建它的副本,但具有对现有实例的实际引用。
我可以通过一个例子更好地解释它。我们有一个班级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] )
我的问题是:
在Kotlin中,作业中是否分配了参考文献,何时分配了副本?
如何确定何时进行分配?
官方文档中是否有详细内容?如果有,我找不到它。
提前致谢!
答案 0 :(得分:2)
Similar to Java,Kotlin从不在任务中隐含地复制对象。变量始终保持对对象的引用,并且将表达式赋值给变量只会复制对象的引用,而不是对象本身。
在幕后,每个值都是基元(Int
,Boolean
,Char
等)或参考。分配值时,结果可以是基元的副本,也可以是对同一对象的引用副本,这些副本永远不会导致被引用的对象被复制。
据我所知,这种行为没有明确记录;相反,它被认为与Java中的相同。