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

相關文章
相關標籤/搜索