【发布时间】:2023-03-08 08:59:01
【问题描述】:
好的,所以我是一个相对较新的程序员。我一遍又一遍地阅读有关传递变量的信息。从我在这里读到的内容是我所理解的:在 Java 中,当您将变量传递给方法(无论是原始方法还是对象)时,您总是按值传递。但是您真正所做的是将引用的副本传递给内存中的对象或变量。
那么为什么他们称之为按值传递呢?在我看来,您是通过引用传递的。另外,在 C 中,当您将指针传递给函数时,您不是在传递内存中变量的地址吗?然而,它被称为按值传递。我在看什么?有人可以解释并澄清我为什么这样做吗?我知道如何传递变量等,我已经阅读了几篇关于此的 SO 帖子,但我还不完全满意。举个例子:
static void setNameStatic(Dog d, String name) {
d.name = name;
}
public static void main (String args[]) {
Dog d = new Dog("dog1");
System.out.println( d.getName() );
setNameStatic( d, "dog2" );
System.out.println( d.getName() );
}
不会输出:dog1 和 dog2。所以你不去参考所指的地方并改变数据吗?值与这里究竟有什么关系?感谢任何有用的 cmets。是的,我知道它是按值传递,但为什么不称为“通过发送引用副本传递”lol?
更新:感谢所有提供有用答案的人。我知道这被标记为重复,对此感到抱歉。我对现在的答案感到满意。
【问题讨论】:
-
@MarounMaroun 这仍然很有趣,因为它是按引用的值传递的。
-
尝试将 d 更改为 setNameStatic 中的 Dog d 以指向另一个实例。
-
总是按值..当它是引用时,引用被传递..按值。
-
您是否能够在方法中更新原始参考(为其分配全新的值)?如果不是,那么您没有通过参考。
标签: java