如何解决在类之间传递2d arraylist
我如何将2d arraylist传递给number类,以便在其中更改它时,测试中的arraylist也会发生变化,反之亦然。就像两个类共享同一个变量一样; 我确实在C上通过引用传递,但是在Java中我不知道
import java.util.ArrayList;
public class test {
ArrayList<ArrayList<String>> stats = new ArrayList<ArrayList<String>>();
public static void main(String[] args)
{
stats.get(0).add("one");
System.out.println(stats.get(0).get(0));
}
}
我希望该数字类能够访问和更改arraylist变量
import java.util.ArrayList;
public class numbers {
//add value
//change value
}
解决方法
TL; DR
我个人认为,无需开发人员的额外努力就自动将数据结构作为引用传递的语言应归类为按引用传递,因为指向过时的标准并不能真正帮助任何人
关于值传递与引用传递的关系
技术上 Java是按值传递
参考:Is Java "pass-by-reference" or "pass-by-value"?
但是,由于该值通常最终是一个指针(除非您传递原始类型),因此最好通过引用传递。
这些天,通过引用语言实际上已经不存在了,通常比不告诉某人某种语言通过值对回答他们的问题不是很有帮助,并且实际上当他们给出错误的主意时首先学习如何编码。
参考:What (are there any) languages with only pass-by-reference?
通常来说,大多数人想知道的是我的数据在哪里以及如何传递。由于Java和Python之类的语言没有给您提供指向数据的指针的选项(否,反射不计数),因此提出了一个问题,即我是否创建一个传递类型Foo
的函数,复制整个Foo
对象中的值,或仅引用同一foo对象。
例如,分别用C和Java编写这两个非常相似的程序。
struct {
int bar;
} Foo;
void editFoo(Foo foo) {
foo.bar = 85;
Foo a;
a.bar = 6;
editFoo(a);
printf("bar: %d",a.bar);
class Foo {
int bar;
}
static void editFoo(Foo foo) {
foo.bar = 85;
}
Foo a = new Foo();
a.bar = 6;
editFoo(a);
System.out.println("bar: " + a.bar);
C版本打印6
,表明该函数未修改a
。为了使其在a
中的数据发生变异,我们需要修改函数以指定它接受引用。但是,另一方面,Java版本会打印85
,表明它确实通过了引用,而无需我们做任何额外的工作。实际上,Java没有像C那样提供按值传递的选项。如果我想传递一个完全独立但相同的Foo
副本,则需要创建一个deepCopy
函数,并在每次传递对象时调用它。我认为,这应该是按值传递和按引用传递的区别。
所以回答你的问题...
您可以将其添加到构造函数中,或通过函数调用将其传递。
public class Numbers {
public static void modifyList(ArrayList<ArrayList<String>> list) {
// You can access it here too!
list.get(0).add("two");
}
}
// Somewhere in main function
Numbers.modifyList(stats);
System.out.println(list.get(0).get(0));
// Should output "two"
但是请注意,由于stats
不是static
,而是在static
上下文中使用,因此您可能会遇到当前代码问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。