首先对不起,这个问题。这是一个非常古老的话题。
是的,我做了很多关于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());
     }
}

输出为OldDogNewDogNewDog但我期待OldDogNewDogOldDog请任何人告诉我我在想什么错误。

最佳答案

您的问题是您对DogName使用了static

因此,当您调用Dog的构造函数时,您正在更改所有Dog对象的DogName值(因为实际上只有一个值)。

static String dogName;
    Dog(String name){
        dogName=name;
    }

将代码更改为此:
   String dogName;
    Dog(String name){
        dogName=name;
    }

08-05 18:52