gpt4 book ai didi

Java 支持按值传递。但无法弄清楚以下代码的原因

转载 作者:行者123 更新时间:2023-12-01 23:54:14 25 4
gpt4 key购买 nike

代码:

class AB{
int i=5;
}

class BC{
public void test(AB a){
a.i=10;
}

}

public class ATest{

public static void main(String aa[]){
AB a = new AB();
//Base class variable value
System.out.println(a.i);

BC b = new BC();
//Modifying the object "a"
b.test(a);
//Printing the base class object
System.out.println(a.i);
}
}

// Output : 5
// 10

如果是按值传递,输出应该是5和5

最佳答案

Java 使用按值传递,但如果参数是对象,Java 按值传递对象的引用,因此被调用的方法可以更改对象的内容,而不是对象的内容一个整体。

这并不意味着对象是通过引用传递的(Joachim Isaksson 的评论是错误的)。

添加来回答 Arijeet Saha 的评论:

当我说“被调用的方法可以更改对象的内容,而不是整个对象”时,我的意思是,如果您更改整个对象,则调用者看不到更改。

考虑以下示例:

public void test(Person p) {
p.setName("Pino");
p = new Person();
p.setName("John");
}

第一行test()改变了方法接收到的对象的内容,第二行改变了整个对象(它给形参分配了一个新的对象),第三行更改新对象的内容。在这种情况下,调用者看到一个名为“Pino”的 Person 对象,而不是“John”,因为 test() 第二行所做的更改对于调用者,召集者;它不可见,因为对象不是通过引用传递的。

关于Java 支持按值传递。但无法弄清楚以下代码的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854032/

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