静态,Java是按值传递的.那为什么我的程序显示输出?

gif*_*pif 7 java pass-by-value

首先抱歉这个问题.这是一个非常古老的话题.
是的,我做了很多搜索,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());
     }
}
Run Code Online (Sandbox Code Playgroud)

输出是,
OldDog
NewDog
NewDog
但我期待
OldDog
NewDog
OldDog
请任何人告诉我我错在哪里.

Men*_*los 5

你的问题是你使用staticDogName.

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

static String dogName;
    Dog(String name){
        dogName=name;
    }
Run Code Online (Sandbox Code Playgroud)

将您的代码更改为:

   String dogName;
    Dog(String name){
        dogName=name;
    }
Run Code Online (Sandbox Code Playgroud)

  • 是的,你是对的.+1很好解释. (5认同)