日期:2014-05-20  浏览次数:20949 次

java ArrayList列表取值问题
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取值是传值调用
求解答!!!

------解决方案--------------------
应该是可以改变的,是不是你的代码写的有问题:
是我写的测试代码,可以参考运行下。
Java code

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;
}

------解决方案--------------------
代码如下
Java code
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());
    }
}

------解决方案--------------------
同一楼
------解决方案--------------------
应该没问题,楼主检查一下代码:)
------解决方案--------------------
我测试也是值被改变了。 10。