初始化变量时链接到另一个变量吗?

时间:2018-07-22 02:00:10

标签: java c# android oop initialization

我想了解什么是clone()方法的好处,什么时候应该使用它,为什么有时当我将变量的值赋予另一个变量时,另一个变量链接到第一个变量,我的意思是,当您更改其中一个变量时,另一个变量的值会自动更改为您更改的值,尽管有时不会发生。 好的,现在我显示一些示例:-

  • Android Java语言中的RectF变量初始化为另一个RectF变量时,它会发生,例如:-

    static RectF var1;
    
    //initialise it
    
    static void someVoid(){
        RectF var2 = var1;
        var2.set(...);
        //now when i changed var2 also the var1 changed
    } 
    
  • ,但是将Integer变量初始化为另一个整数变量时,它不会发生,(例如):-

    static int azhy = 1000;
    
    static void someVoid(){
        int hello = azhy;
        hello++;
        //now when i change the hello variable azhy variable stays constantly
    }
    

我搜索了某个地方,但没有找到结果,所以如果您能给我一些描述,我会谢谢您。

2 个答案:

答案 0 :(得分:1)

有关对象与基元之间区别的一些有用背景,请参见答案hereint是原始类型,而RectF是对象。

您可以认为原始类型分配操作(int hello = azhy;)是将值从azhy复制到hello,但是它们并不引用同一对象(因此修改{{ 1}}不会修改hello

另一方面,azhy是一个对象,因此调用RectF意味着RectF var2 = var1;var1现在都引用同一对象。这样,在var2上调用方法会修改var2

请注意,var1是原始类型,但是int(您在问题中所指的)是一个对象。

答案 1 :(得分:1)

在第一个示例中,您正在使用一个对象,所以当您这样做时:

RectF var2 = var1;

您实际上是使var2指向计算机的相同内存,并且当您从一个对象更改值时,它也会同时将其更改为另一个对象,因为它具有相同的内存空间,但名称不同。

在第二个示例中,您正在使用原始变量,所以当您这样做时:

int hello = azhy;

您只是将值复制到计算机的新内存空间中。

如果要复制对象而不使它们相同,则必须创建该对象的新实例,而仅复制值。使用this作为参考