java - 在类之间传递二维数组列表
问题描述
我将如何将我的二维数组列表传递给数字类,这样当我在那里更改它时,我在测试中的数组列表也会改变,反之亦然。就像两个类共享同一个变量;我确实在 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;博士
在我个人看来,无需开发人员额外努力即可自动将数据结构作为引用传递的语言应归类为按引用传递,因为指向过时的标准并不能真正帮助任何人。
关于按值传递与按引用传递的咆哮
从技术上讲,Java 是按值传递的
但是,由于该值通常最终成为指针(除非您传递原始类型),因此它也可以通过引用传递。
如今,参考传递语言几乎不存在,而且往往不告诉某人一种语言是传递值传递对回答他们的问题没有多大帮助,而且实际上可能在他们第一次学习如何做时给他们错误的想法编码。
一般来说,大多数人想知道的是我的数据在哪里以及它是如何传递的。由于像 Java 和 Python 这样的语言不给你选择指向数据的指针(不,反射不算数),它提出了一个问题,如果我创建一个传递 type 的函数,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
。
推荐阅读
- php - 使用 ORM 进行查询并在内部一起使用 (AND) 和 (OR)
- html - 使用默认字体的字体系列
- jquery - CSS 过渡的问题
- javascript - Vue Axios 推送数组未实时更新
- spring - 如何通过调用spring logback中的方法来限制日志记录
- java - Calendar.getInstance 与 TimeZone 与 new Date()
- android - 无法正确将 Firebase 数据导入 RecyclerView(Android)
- java - 替代 CDI 实现 - WELD-001408:具有限定符 @Default 的类型存储库的依赖关系不满足
- python - 错误 KeyError: 'ObjectType' 加载泡菜时
- react-native - react-native-router-flux 场景之间的导航方向