gpt4 book ai didi

Java 关于对象作用域和对象修改

转载 作者:行者123 更新时间:2023-12-01 23:45:56 24 4
gpt4 key购买 nike

我有一个问题,关于我猜测对象的范围以及对象所保存的值在某些条件下是否会改变。例如,我创建了一个类,在其中需要构造多个对象实例,但这些实例需要在整个程序中使用和修改,并且在创建第一个实例后不应创建新实例(我不这样做)不知道这将遵循什么设计模式(如果有)。我设计该对象的方式类似于以下内容:

//basic constructor class
public class MyObject {

private String var1;
private int var2;
private boolean vr3

public MyObject(String param1, int param2, boolean param3) {
var1 = param1;
var2 = param2;
var3 = param3;
}

//getter and setter methods

}

//in main class
Map<String, MyObject> myObjects = new HashMap<String, MyObject>();

在程序开始时,我搜索一些文件来构造新的 MyObject 对象,然后将它们放入 HashMap 中,这是唯一应该创建新的 MyObject 的时间。因此,在整个程序中,我通过获取与 String 键匹配的值来获取 HashMap 中的对象,一旦获得该对象,我就可以使用不同的 setter 方法对其进行操作,如下所示:

MyObject object1 = MyObjects.get("anObject");

object1.setVar1("这是对象的新var1字符串值");

上面的代码应该更改 HashMap 中键“anObject”下的对象中的字符串值。但我想知道这是否也适用于列表之类的东西?就像说我有一个列表作为对象中的值之一,如果我从 HashMap 获取该对象,并调用类似的内容:

object1.getList().add("new value in the object1 list"); 

这会将值添加到 hashMap 中的对象吗?我想知道这一点,因为自从我打电话以来:MyObject object1 = MyObjects.get("anObject");看起来它可能正在创建该类的新实例,或者只是将其复制过来,并且对该 object1 对象的任何更改都不会对该 HashMap 中的对象进行。

对从 HashMap 获取的对象的任何值所做的更改都会被放回 HashMap 中的对象,我这样说正确吗?抱歉问了这个愚蠢的问题。

最佳答案

Java 是按值传递的,但是 MyObject 是一个引用,并且这是按值传递的。

这意味着对对象的引用的每个副本都是同一个对象,无论您在何处尝试更改它,同一个对象都将被更改。

对象本身只会在复制时被复制,而不是隐式复制。

关于Java 关于对象作用域和对象修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17050840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com