java - 如何从 Java 中的另一个类更改对象值(看起来与 Arraylist 相同)?
问题描述
我对ArrayList
另一个可以更改另一个类的值的变量感到困惑。我有两个类和两个带有ArrayList
andObject
变量的示例。有人可以帮助我理解为什么它会有所不同,以及是否有解决方案使其具有相同的效果?
这是 ArrayList 的代码:
import java.util.List;
public class Test {
private String name = "Fifi";
void fill(List<Test> a) {
a.add(this);
}
}
import java.util.ArrayList;
import java.util.List;
public class B {
private List<Test> a = new ArrayList<Test>();
//a variable is empty
public B() {
// TODO Auto-generated constructor stub
Test oa = new Test();
oa.fill(a);// After this method is called, a variable has change with name is "FiFi"
}
public static void main(String[] args) {
new B();
}
}
然后,我有与对象变量相同的形式,但结果不一样。
public class Test {
private String name = "Fifi";
void fill(Test b) {
b = this;
}
}
public class B {
private Test a;
// so a variable is null
public B() {
// TODO Auto-generated constructor stub
Test oa = new Test();
oa.fill(a);// after fill method is called, a still null!
}
public static void main(String[] args) {
new B();
}
}
与上面的 Arraylist 和对象变量有什么不同?我不明白它是如何发生的基础知识!
解决方案
ArrayList
和Object
是两个完全不同的概念。数组列表 对象
oa.fill(a); // 调用填充方法后,仍然为空!
a
为空,因为这
私人测试a;
不是对象,而是Test
类的引用。所以没有内存分配给a
. 声明和实例化的区别
private Test a = new Test(); //object is created
您的两个代码之间的区别:
oa
此代码将类的 object( )附加Test
到 List a
-
public class Test {
private String name = "Fifi";
void fill(List<Test> a) {
a.add(this);
}
}
在这段代码中,您将一个对象()的内容分配给同一类的oa
另一个对象( ) -a
Test
public B() {
Test oa = new Test();
oa.fill(a);
System.out.print(a.name); //output: Fifi
}
推荐阅读
- javascript - 使用 swagger-jsdoc 记录 express API 的具体步骤是什么?
- perforce - 更新客户端的列表以反映 HD 中的内容
- db2 - 在 db2 表中加载挂起状态
- firebase - Firestore 规则允许读取条件时间戳问题
- swift - 如何在 Swift 中使用“扩展字符串分隔符”?
- c# - 获取图表轴的最后一个刻度
- python - 字典字典的字符串
- android - Android - 位置粘性(CSS)在android webview中不起作用
- gulp - 找不到模块'babel-preset-env'
- apache-kafka - Kafka 为消费者减少延迟