java - 不同的对象数组元素引用同一个对象?
问题描述
我有一个用于存储不同对象的对象数组。当我尝试从任一对象获取数据时,它会给出最后一个对象的数据。我制作了一些新的测试文件,并将所有内容归结为问题本身。这就是我的意思:
public class Test
{
public static ObjectTest[] objArray = new ObjectTest[2];
public static void main(String[] args)
{
objArray[0] = new ObjectTest("Jimmy");
objArray[1] = new ObjectTest("Terry");
System.out.println(objArray[0].getName());
System.out.println(objArray[1].getName());
}
}
这输出:
Terry
Terry
这里也是 ObjectTest.java:
public class ObjectTest
{
private static String name;
public ObjectTest(String nm)
{
name = nm;
}
public static String getName()
{
return name;
}
}
是什么让这个打印出最后一个对象的名称?这里不应该有2个不同的对象吗?好像只有1个。
解决方案
所有类实例之间共享的静态变量,最后一个值覆盖您之前设置的所有内容。使用实例变量而不是静态变量:
public class Main {
public static ObjectTest[] objArray = new ObjectTest[2];
public static void main(String[] args) {
objArray[0] = new ObjectTest("Jimmy");
objArray[1] = new ObjectTest("Terry");
System.out.println(objArray[0].getName());
System.out.println(objArray[1].getName());
}
}
class ObjectTest {
private String name;
public ObjectTest(String nm) {
name = nm;
}
public String getName() {
return name;
}
}
输出:
Jimmy
Terry
推荐阅读
- python - 将存储在字典中的值添加为值列表
- vue.js - 在 vue jest 测试中模拟 axios 的自定义实例
- java - 返回具有父类类型的子时类型不匹配
- python - 用 dummy 覆盖所有类方法
- typescript - 打字稿:如何从对象内引用文字对象的其他道具?
- bash - 新行分隔参数被视为 shell 脚本中的一个位置参数
- css - Bootstrap DatePicker:与擦除文本事件的从到同步
- javascript - 如何从浏览器启动外部应用程序,例如 Telegram url 链接?
- azure - 使用 az cli 将参数传递给 --custom-data Cloud Init 脚本
- html - 如何在 IE 中使用带有 after 和 befor 伪元素的 div 的阴影效果?