A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 微微微笑 中级黑马   /  2014-8-3 21:54  /  987 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.Vector;


public class test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        test();

    }
    public static void test(){
        String name[]={"Li","ndk"};
        int age[]={1,2};
        Vector<Object> v=new Vector<Object>();
        Person p=new Person();
        for(int i=0;i<2;i++){
            //Person p=new Person();       *******************
            p.setName(name[i]);
            p.setAge(age[i]);
            v.add(p);
        }
        for(int i=0;i<v.size();i++){
            System.out.println(v.get(i));
        }
        
    }

}
class Person{
    private String name="";
    private int age=0;
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        this.age=age;
    }
}
上程序中,当把   Person p=new Person();   放在for循环外,则打印出的会被最后一个地址值覆盖,放在里面就正常,查了一下说是作用域太大,不过没看懂,有没有懂的仔细解释一下?

3 个回复

倒序浏览
放在外面,只实例化了一个对象,放在里面,每次for循环实例化一个对象,在你的例子里实例化了两个人。
即放在外面时,只有一个人,你在操作名字,年龄,只有一个人,你能给这个人两个名字,两个年龄?
回复 使用道具 举报
liqi 发表于 2014-8-3 22:10
放在外面,只实例化了一个对象,放在里面,每次for循环实例化一个对象,在你的例子里实例化了两个人。
即放 ...

懂了,谢了:handshake
回复 使用道具 举报

不客气。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马