Java 对于整型变量,不使用'=';运算符是否等于值或参考值?
代码1: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
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);此代码中的=
与等于方法不对应。