Java 对于整型变量,不使用'=';运算符是否等于值或参考值?

Java 对于整型变量,不使用'=';运算符是否等于值或参考值?,java,operators,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("R

代码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());
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);
输出:

Green , I20
Green , I20
Red , I10
Red , I10
5, 10
10, 10
7, 10
这里的
car1=car2使
car1
对象引用
car2
对象,因此对
car1
的任何进一步更改等同于更改
car2
对象,因为两者都引用相同的值

代码2:

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());
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);
输出:

Green , I20
Green , I20
Red , I10
Red , I10
5, 10
10, 10
7, 10

这里也是在
c=d之后
c
和d都引用相同的值,那么为什么更改c的值不会更改d的值?

因为java.lang.Integer比Car有点特殊。Integer类只包装java原语int,its方法在原语int上求值

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


您可以阅读javaDoc以了解更多详细信息:

否,因为您在c中指定了值d而不是相反。 你明白吗?
如果希望在d中分配值c,则为c的接收引用写入d=c

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

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

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

=
修改变量,而不是对象。更改变量的值与修改对象的状态大不相同。改变你的邮寄地址并不能改变你原来地址的房子,当然也不会改变其他住在那里的人的地址。@ΦXocę웃Пepeúpaツ - 我认为原因更多的是
Integer
变量是引用-
c=d;c=7修改
d
不超过
Foo d=新Foo(42);Foo c=d;c=新食品(69)
does。在一个代码片段中你写了
somethingElse()
,在另一个代码片段中你写了
somethingElse
,那只是做了完全不同的事情。你好@OliverCharlesworth这是一个好的。。。c=7将是c=新整数(7);此代码中的
=
等于方法不对应。