我需要一个类引用另一个类。不创建它的副本,但实际引用已经存在的实例。
我也许可以用一个例子更好地解释它。如果我们有一个类 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 中,in assignment 何时分配引用,何时分配副本?
我如何确定什么时候发生的分配?
官方文档中有详细说明吗?如果有我找不到。
提前致谢!
最佳答案
Similar to Java , Kotlin 从不隐式复制对象赋值。变量总是保存对对象的引用,将表达式分配给变量只会复制对对象的引用,而不是对象本身。
在底层,每个值要么是一个原始值(Int
、Boolean
、Char
等),要么是一个引用。赋值时,结果要么是原语的副本,要么是对同一对象的引用的副本,这永远不会导致被引用的对象被复制。
据我所知,这种行为没有明确记录;相反,假定它与 Java 中的相同。
关于class - Kotlin 值与赋值中的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49585498/