Class Kotlin值与分配中的参考值

Class Kotlin值与分配中的参考值,class,oop,object,reference,kotlin,Class,Oop,Object,Reference,Kotlin,我需要一个类引用另一个类引用。不创建它的副本,但具有对已存在实例的实际引用 我可以用一个例子更好地解释它。我们是否有一个类图像: class Image(imgPath: String) { val height : Int val width : Int val rgbMatrix: MutableList< MutableList< Triple<Int, Int, Int> > > /* ... etc. ..

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

我可以用一个例子更好地解释它。我们是否有一个类
图像

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

    /* ... etc. ... */
}
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分配何时分配引用,何时分配副本

  • 我如何确定什么样的任务发生时

  • 官方文件中是否有详细说明这一点的部分?如果有,我就找不到

  • 提前谢谢

    ,Kotlin从不在赋值时隐式复制对象。变量始终包含对对象的引用,将表达式指定给变量只会复制对对象的引用,而不会复制对象本身

    在引擎盖下,每个值要么是一个基元(
    Int
    Boolean
    Char
    等),要么是一个引用。赋值后,结果要么是原语的副本,要么是对同一对象引用的副本,这永远不会导致被引用对象被复制

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


    另请参见:

    你试过吗?@OliverCharlesworth我没有试过,因为我的问题不是关于这个特殊的案例。尝试这个例子当然很简单,但在我正在进行的一个更大的项目中,要达到我需要这种行为的状态和条件,并充分测试它,这将是非常困难的,因此我正在寻找一个一般性的答案:)谢谢!现在,有没有一个列表,列出哪些类型是基元类型,哪些类型不是基元类型?我的意思是,在java中,很明显,基本类型不是对象,您只需像在C中一样实例化它们,但在这里,没有显式的基本类型……实际上,从类型系统和语言的角度来看,Kotlin根本没有基本类型,它们主要是一个实现细节(参见此)。您可以查看JVM原语类型列表,找出哪些类型可以优化为JVM上的原语(这些类型加上
    Char
    Boolean
    )。