ArrayList和修改其中包含的对象

Pri*_*alj 23 java arraylist pass-by-reference

假设我们有一个ArrayList myArray.我想通过调用它的函数来修改一个对象.如果我这样做,原始对象是否会被更改?

myArray.get(0).myModyfyingFunction();
Run Code Online (Sandbox Code Playgroud)

为了进一步澄清 - 我担心get()实际上是返回对原始对象的引用还是只返回原始对象的副本.

Ósc*_*pez 61

get()将返回对象的引用,永远不会复制.您对返回的引用所做的任何修改都将在对象本身上进行

  • 这是真的,所有对象都按值传递.令人困惑的部分是,_references_也是通过值传递的 - 意味着当你将一个对象添加到一个ArrayList时,最终会有两个引用指向同一个对象,如果你修改了一个引用,那么"other"也会被修改,因为两者都指向同一个对象 (5认同)
  • @PrimožKralj:“对象”不是 Java 中的值。永远不会传递或分配对象。您总是按值分配和传递引用 (2认同)

kun*_*ora 7

如果在ArrayList中存储任何对象,则不会复制Object,并且对象中的任何更改都应反映在对象本身中.

例如,我们有类NewClass

  public class NewClass {

private String mystring="";

/**
 * @return the mystring
 */
public String getMystring() {
    return mystring;
}

/**
 * @param mystring the mystring to set
 */
public void setMystring(String mystring) {
    this.mystring = mystring;
}
Run Code Online (Sandbox Code Playgroud)

}

这是任何其他类的main方法中的代码

   List<NewClass> newclasses = new ArrayList<NewClass>();
    NewClass class1 = new NewClass();
    class1.setMystring("before1");
    NewClass class2 = new NewClass();
    class2.setMystring("before2");
    newclasses.add(class1);
newclasses.add(class2);
newclasses.get(0).setMystring("after1");
System.out.println(class1.getMystring());
Run Code Online (Sandbox Code Playgroud)

这将输出after1.