码迷,mamicode.com
首页 > 编程语言 > 详细

java 对象引用与赋值

时间:2015-11-03 19:46:30      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

案例:

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;
    }
    
}
输出结果:

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

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

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

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

解决方案:

方案1——

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

输出:

====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




java 对象引用与赋值

标签:

原文地址:http://my.oschina.net/u/2494018/blog/525474

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!