java 对象引用与赋值

案例:java

package com.util;

import java.util.ArrayList;
import java.util.List;

public class CopyObjectUtil {
    private static List<String> list;
    private static User userTemp;
    static{
        list=new ArrayList<String>();
        list.add("aa");
        list.add("bb");
        
        userTemp=new User();
        userTemp.setName("CA");
        userTemp.setRemark("原始值");
        userTemp.setAge(20);
    }
    
    public static void main(String[] args) {
        List<User> userList=new ArrayList<User>();
        for(int i=0;i<list.size();i++){
            User user =new User();
            user=userTemp;
            user.setName(list.get(i));
            user.setAge(user.getAge()+i);
            userList.add(user);
        }
        int i=0;
        for(User o : userList){
            System.out.println("===="+i+++"=======");
            System.out.println(o.getName());
            System.out.println(o.getRemark());
            System.out.println(o.getAge());
        }
        
    }

}
class User{
    private String name;
    private String remark;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
}
输出结果:this

====0=======
bb
原始值
21
====1=======
bb
原始值
21对象

问题:从结果表项上看list中的前一个对象的值被后一个对象给覆盖了。rem

User user =new User();
            user=userTemp;get

缘由:地址指向同一对象,List<User> 中的User都引用了同一对象,而这个对象就是userTemp=new User();静态块里建立的;for循环对其修改,实际修改的是同一对象,固会出现后面的值覆盖前面的值的现象;io

解决方案:for循环

方案1——class

  public static void main(String[] args) throws Exception{
        List<User> userList=new ArrayList<User>();
        for(int i=0;i<list.size();i++){
            User user =new User();
            user=(User)BeanUtils.cloneBean(userTemp);
            user.setName(list.get(i));
            user.setAge(user.getAge()+i);
            userList.add(user);
        }
        int i=0;
        for(User o : userList){
            System.out.println("===="+i+++"=======");
            System.out.println(o.getName());
            System.out.println(o.getRemark());
            System.out.println(o.getAge());
        }
        
    }import

输出:List

====0=======
aa
原始值
20
====1=======
bb
原始值
21

方案2——

public static void main(String[] args) throws Exception{
        List<User> userList=new ArrayList<User>();
        for(int i=0;i<list.size();i++){
            User user =new User();
            BeanUtils.copyProperties(userTemp, user);
            user.setName(list.get(i));
            user.setAge(user.getAge()+i);
            userList.add(user);
        }
        int i=0;
        for(User o : userList){
            System.out.println("===="+i+++"=======");
            System.out.println(o.getName());
            System.out.println(o.getRemark());
            System.out.println(o.getAge());
        }
        
    }

输出:

aa原始值20====1=======bb原始值21

相关文章
相关标签/搜索