我想了解什么是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
}
我搜索了某个地方,但没有找到结果,所以如果您能给我一些描述,我会谢谢您。
答案 0 :(得分:1)
有关对象与基元之间区别的一些有用背景,请参见答案here。 int
是原始类型,而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作为参考