我最初理解引用的方式是,它们只是内存引用,保存着它们所持有的实际对象的内存位置。不过,下面的代码及其输出让我感到困惑。在这里您可以看到一个简单类 Man 的实现。
我在第一行创建了一个 Man 对象,引用名为 peter。 peter 本身只是一个内存位置,对吧?所以人应该只是将对象存储在它所在的内存位置。
但是当我将另一个 Man 引用分配给 peter 并稍后更改 peter 的名字时,person 不知道这一点并打印名字。这怎么可能,因为它存储了 peter 的内存引用?它不应该能够跟随对其所做的更改吗?
public class Testing {
public static void main(String[] args) {
Man peter = new Man("brown", 182, 78000, "Peter");
Man person = peter;
peter = new Man("brown", 182, 78000, "Leonard");
System.out.println(person.name);
}
}
class Man {
String hairColor;
int height;
double salary;
String name;
public Man()
{
hairColor = "brown";
height = 180;
salary = 50500.5;
name = "John";
}
public Man(String hair, int high, double pay, String nam)
{
this.height = high;
this.hairColor = hair;
this.salary = pay;
this.name = nam;
}
}
最佳答案
这里:
Man peter = new Man("brown", 182, 78000, "Peter");
创建一个名为“Peter”的 Man 对象。
Man person = peter;
创建另一个“指向”上面创建的对象的变量。
peter = new Man("brown", 182, 78000, "Leonard");
创建另一个 Man named Leonard,然后 peter
变量“指向”那个新的第二个对象。
注意:人
没有“指向” peter
。它指向内存中的 Man “对象”。
并且将另一个 “内存地址” 放入peter
变量中不会更改您创建的初始对象。
关于java - 我无法理解对象引用在 Java 中的工作方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56785593/