gpt4 book ai didi

java - 是否可以更新方法中的引用?

转载 作者:行者123 更新时间:2023-11-30 08:15:13 24 4
gpt4 key购买 nike

我问过这个问题here .我会尽量使这个更具体。

class Example {

public static void main(String[] args) {
A a = null;
load(a);
System.out.println(a.toString());
// outcome is null pointer exception
}

private static void load(A a) {
a = new A();
}

}

class A {
public void String toString() {
return "Hello, world!"
}
}

那么,是否可以更新方法中的引用?出于某种原因,我需要这样做。原因可以在上面的链接页面中看到。

最佳答案

是的,如果您将参数定义为 A[]load(A[] a) ,然后在方法中更新位置 0 处的元素,这是可能的在该数组中,即 a[0] = new A()。否则,这是不可能的,因为 Java 是按值传递的。我经常使用这种解决方法。

示例 1:

class Example {

public static void main(String[] args) {
A[] a = new A[1];
a[0] = new A("outer");
System.out.println(a[0].toString());
load(a);
System.out.println(a[0].toString());
}

private static void load(A[] a) {
a[0] = new A("inner");
}

}

class A {

private String name;

public A(String nm){
name = nm;
}

public String toString() {
return "My name is: " + name;
}
}

示例 2:

class Example {

public static void main(String[] args) {
A[] a = new A[1];
a[0] = null; // not needed, it is null anyway
load(a);
System.out.println(a[0].toString());
}

private static void load(A[] a) {
a[0] = new A("inner");
}

}

class A {

private String name;

public A(String nm){
name = nm;
}

public String toString() {
return "My name is: " + name;
}
}

注意:事实上,您可以使用任何包装对象(自身包含引用的对象)来代替A[]到一个 A 对象)。 A[] a 就是这样的一个例子。在这种情况下,a[0] 是对 A 对象的引用。我只是认为使用 A[] 是实现此目的的最简单(最直接)的方法。

关于java - 是否可以更新方法中的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029702/

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