ArrayList<Student> list=new ArrayList<Student>();
Student s=new Student();
s.setName("xiaoming");
s.setAge(20);
list.add(s);
s=list.get(0);
s.setAge(10);
System.out.println("改变后的年龄值为:"list.get(0).getAge());
预期结果:改变后的年龄值为:10
但是运行结果显示是:改变后的年龄值为:20前后s对象引用的都是同一块内存,为什么对象中的值没有被修改,难道ArrayList取值是传值调用
求解答!!!

解决方案 »

  1.   

    应该是可以改变的,是不是你的代码写的有问题:
    是我写的测试代码,可以参考运行下。package test;import java.util.ArrayList;public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    ArrayList<Student> list=new ArrayList<Student>();
    Student s=new Student();
    s.setName("xiaoming");
    s.setAge(20);
    list.add(s);
    s=list.get(0);
    s.setAge(10);
    System.out.println("改变后的年龄值为:"+list.get(0).getAge()); }}class Student{

    public Student(){

    }

    /**
     * @return the name
     */
    public String getName() {
    return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
    this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
    return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
    this.age = age;
    } private int age;
    private String name;
    }
      

  2.   

    代码如下
    import java.util.ArrayList;
    import java.util.List;import obj.Student;public class TestInteger { public static void main(String[] args) {
    List<Student> list = new ArrayList<Student>();
    Student stu = new Student(); stu.setName("Tom");
    stu.setAge(20);

    list.add(stu);

    stu = list.get(0);
    stu.setAge(10); System.out.println(stu.getAge());
    System.out.println(list.get(0).getAge());
    }
    }