首先对不起,这个问题。这是一个非常古老的话题。
是的,我做了很多关于java通过值传递的搜索。
但是通过我的程序显示出来。我不明白为什么?
我的程序是
class Dog{
static String dogName;
Dog(String name){
dogName=name;
}
public void setName(String newName){
dogName=newName;
}
public String getName(){
return dogName;
}
}
class JavaIsPassByValue{
public static void main(String arr[]){
Dog dog1=new Dog("OldDog");
new JavaIsPassByValue().display(dog1);
System.out.println(dog1.getName());
}
public void display(Dog d){
System.out.println(d.getName());
d = new Dog("NewDog");
System.out.println(d.getName());
}
}
输出为
OldDog
NewDog
NewDog
但我期待OldDog
NewDog
OldDog
请任何人告诉我我在想什么错误。 最佳答案
您的问题是您对DogName使用了static
。
因此,当您调用Dog的构造函数时,您正在更改所有Dog对象的DogName值(因为实际上只有一个值)。
static String dogName;
Dog(String name){
dogName=name;
}
将代码更改为此:
String dogName;
Dog(String name){
dogName=name;
}