gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:01 24 4
gpt4 key购买 nike

首先对这个问题感到抱歉。这是一个非常古老的话题。
是的,我做了很多搜索,发现 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());
}
}

输出是
老狗
新狗
新狗
但我期待着
老狗
新狗
老狗
请任何人告诉我我哪里想错了。

最佳答案

您的问题是您对 DogName 使用 static

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

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

将您的代码更改为:

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

关于java - 静态的,Java是按值传递的。那为什么我的程序显示那个输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18764930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com