对于整数类型变量,是' ='运算符等于值或引用?

时间:2017-11-16 18:52:43

标签: java operators

代码1:

Car car1 = new Car();
Car car2 = new Car();
car2.setColor("Green");
car2.setModel("I20");
car1 = car2;
System.out.println(car1.getColor() + " , " + car1.getModel());
System.out.println(car2.getColor() + " , " + car2.getModel());
car1.setColor("Red");
car1.setModel("I10");
System.out.println(car1.getColor() + " , " + car1.getModel());
System.out.println(car2.getColor() + " , " + car2.getModel());

输出

Green , I20
Green , I20
Red , I10
Red , I10

此处car1 = car2;使car1对象引用car2对象,因此对car1的任何进一步更改等同于更改car2对象,因为两者都是引用相同的值。

代码2:

Integer c = 5;
Integer d = 10;
System.out.println(c + ", " + d);
c = d;
System.out.println(c + ", " + d);
c = 7;
System.out.println(c + ", " + d);

输出

5, 10
10, 10
7, 10

此后,c = d; cd引用同一个值后,为什么更改c的值不会更改d的值?

3 个答案:

答案 0 :(得分:1)

整数是不可变的。这意味着它不能以这种方式改变。您不能更改其内部字段。您不能更改它指向的内存中的哪个位置,但您可以更改分配给给定Integer的引用的值。例如,当你写

Integer i = 5;
Integer j = 10;
i = j;

这并不意味着从现在开始i指向内存中j指向的同一位置。它只是将j中存储的值分配给i,因为只允许不可变类型。

答案 1 :(得分:0)

否,因为您在c中指定值d而不是反向。 你明白吗 ? 如果你想要在d中给出值c,你可以写d = c来表示c

的重新参考

答案 2 :(得分:-2)

因为java.lang.Integer比Car有点特殊。 Integer类只包装java原始int,其equals方法在原始int上进行求值。

当你指定c = d时,它会将内部int设置为10但仍然是那两个内部int是不同的(不引用相同的内存)。因此,稍后对c的重新分配不会改变d的值。

您可以阅读javaDoc以获取更多详细信息:https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html