鉴于此:
int a = 10;
int b = a;
a++;
b = 10或11?如果是10,那为什么会发生这种情况(我以Android为例):
TextView x = new TextView();
TextView y = x;
x.setText("abcde");
导致y的文字也被设置为" abcde",不是吗?
编辑:
如果我使用'整数'而不是' int'?请问b = 11?
答案 0 :(得分:2)
int
是原语,因此a
和b
不引用对象,它们只保存一个值。因此,作业int b = a;
会将a
的原始值复制到b
,而a++
只会修改a
。
使用引用类型时,行为会有所不同,如TextView
代码段所示。 x
和y
引用相同的TextView
实例(对象),因此x.setText("abcde")
修改两者引用的单个实例。
答案 1 :(得分:2)
你需要回归基础。
Java中的原语和对象的工作方式不同。
例如,对于下面的代码,a
和b
是不同的变量并具有各自的值。
int a = 10;
int b = a;
a++;
因此,当您执行a++
时,它只影响a
而不是b
的值,因为它们是基元,并且它们具有单独的单个值。
但是对于这段代码
TextView x = new TextView();
TextView y = x;
x.setText("abcde");
x
和y
都是不同的变量,但它们都指的是内存中的同一个对象。
因此,当您使用一个引用来更改值时,它将在内存中的实际对象上进行更改,因此您在访问它时会获得新值,尽管这次使用的是另一个引用内存中相同对象的变量
答案 2 :(得分:0)
好吧,a++
是a = a + 1
的简称形式,因此您为a
分配了一个新值,这是将1
添加到a
的结果。但是在第二个示例中,您调用x
和y
引用的对象上的方法,因此您可以修改该对象。
答案 3 :(得分:0)
在第二种情况下,为该对象创建了Memory。对象y指向对象x。所以对象x和对象y正在访问相同的内存。每当我们更改对象x的任何属性时,它都会存储在该内存位置。由于对象y也指向相同的内存位置,因此值也会反映到对象y的属性中。
在第一种情况下,我们只是为变量赋值,我们没有为该变量分配单独的内存块。
答案 4 :(得分:0)
如果我使用'Integer'而不是'int'怎么办?请问b = 11?
答案:Integer是一个包装类,当我们想使用Objects而不是原始数据类型时,我们使用包装类。两种情况下“b”都相同。 包装类提供了将原始类型转换为对象和对象为基本类型(装箱和取消装箱)的机制
其他人很好地解释了其他部分,所以我没有为它添加任何东西。
答案 5 :(得分:0)
使用Integer问题,Java中的Integer是不可变的。你必须使一个新的Integer增加。因此,它不会起作用。
另一部分已经回答了。