Java 在类之间传递2d arraylist

Java 在类之间传递2d arraylist,java,arraylist,Java,Arraylist,如何将2d arraylist传递给number类,以便在其中更改它时,测试中的arraylist也会更改,反之亦然。就像两个类共享同一个变量一样; 我确实在C上通过引用传递,但在java中我不知道 import java.util.ArrayList; public class test { ArrayList<ArrayList<String>> stats = new ArrayList<ArrayList<String>>();

如何将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));
    }
}
TL;博士 在我个人看来,自动将数据结构作为引用传递而不需要开发人员额外努力的语言应该被归类为通过引用传递,因为指向过时的标准并不能真正帮助任何人

关于按值传递与按引用传递的比较 从技术上讲Java是按值传递的

参考:

但是,由于该值通常以指针结束(除非您传递的是基元类型),因此它也可以通过引用传递

如今,参考语言实际上已经不存在了,而且往往比不告诉别人一种语言是通过值传递的对回答他们的问题没有多大帮助,事实上,当他们第一次学习如何编码时,可能会给他们错误的想法

参考:

一般来说,大多数人想知道的是我的数据在哪里以及如何传递。由于Java和Python等语言不允许您使用指向数据的指针(不,反射不起作用),这就提出了一个问题:如果我创建一个传递type
Foo
的函数,它会复制整个
Foo
对象中的值,还是只引用同一个Foo对象

以这两个分别使用C和Java的非常相似的程序为例

struct{
int-bar;
}傅;
void editFoo(Foo-Foo){
foo.bar=85;
福阿;
a、 巴=6;
editFoo(a);
printf(“条:%d”,a.bar);
class-Foo{
int-bar;
}
静态void editFoo(Foo-Foo){
foo.bar=85;
}
Foo a=新的Foo();
a、 巴=6;
editFoo(a);
System.out.println(“bar:+a.bar”);
C版本打印
6
,表明函数没有修改
a
。为了使它变异
a
中的数据,我们需要修改函数以指定它采用引用。然而,另一方面,Java版本打印
85
,表明它确实通过了引用,而没有任何额外的修改就我们而言,这是一项工作。事实上,Java没有像C一样提供按值传递的选项。如果我想传递一个完全独立但相同的
Foo
副本,我需要创建一个
deepCopy
函数,并在每次传递对象时调用它。在我看来,这就是按值传递和pa的区别所在通过引用的方式

所以回答你的问题。。。 您可以将其添加到构造函数或通过函数调用传递它

公共类编号{
公共静态无效修改列表(ArrayList列表){
//你也可以在这里访问它!
列表。获取(0)。添加(“两”);
}
}
//主要功能的某处
数字。修改列表(统计);
System.out.println(list.get(0.get(0));
//应该输出“两个”

但是在这一点上,您可能会遇到当前代码的问题,因为
stats
不是
static
,而是在
static
上下文中使用的始终如此。请阅读:是的,这是真的,但我认为作为初学者,将其视为通过引用更容易理解。因为几乎所有与通过值/引用相关的问题都集中在确定类中的数据是否被复制上,我觉得称之为通过值可能会有点误导。我将编辑我的帖子阐明我的意思。为什么不简单地使用getter和setter方法,并在numbers类中包含一个测试字段呢?这是基本Java,我鼓励您阅读有关使用这些方法的入门教程或教科书。
import java.util.ArrayList;

public class numbers {
    //add value
    //change value
}