如果两个对象访问同一个实例变量,会发生什么



我创建了一个用户定义的对象,该对象访问一个实例变量和一个方法。然后我创造了一个由3个元素组成的数组,其中一个引用变量引用了我最初创建的对象。现在,如果两个引用都引用了同一个对象,类的实例变量会发生什么?为什么它的null表示ruff??

CODE:
public class Dog{
String name;
public static void main(String[] args){
Dog dog1=new Dog();
dog1.bark();
dog1.name="Brat";

Dog myDogs[]=new Dog[3];
myDogs[0]=new Dog();
myDogs[1]=new Dog();
myDogs[2]=dog1;

myDogs[0].name="Fred";
myDogs[1].name="Marge";
System.out.print("last dogs name is ");
System.out.println(myDogs[2].name);
int x=0;
while(x< myDogs.length){
myDogs[x].bark();
x=x+1;
}

}
public void bark(){
System.out.println(name+" says Ruff");
}

}
OUTPUT:
null says Ruff
last dogs name is brat
Fred says Ruff
Marge says Ruff
brat says Ruff

问题是,在为类属性String name设置值之前,您正在调用方法dog1.bark((,因此,如果在创建对象之前没有初始化类属性的值,java将自动分配默认值。因此,像Stringname这样的对象引用将被初始化为null。因此,您将获得名称为null的输出。

所以在第二个代码片段中,你正在做的是分配";胸罩";在创建完对象之后,您将调用dog1.bark((,因此在这种情况下,您在bark((函数中的逻辑将更改String name=null----->默认值name=";胸罩">,这就是为什么你得到了一个"的输出;Brat说Ruff";

因为在设置dog1.name之前调用dog1.bark(),所以在调用dog1.bark()name为空。这就是为什么dog1.bark()为名称打印null

Dog dog1=new Dog();
dog1.bark();
dog1.name="Brat";

如果你之前像这个一样设置dog1.name

Dog dog1=new Dog();
dog1.name="Brat";
dog1.bark();

然后打印Brat says Ruff

最新更新