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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张超超 黑马帝   /  2012-4-18 18:20  /  2247 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Person
{
        String name;
        int age;
        /*
        public void eat()
        {
            //System.out.println("年龄:"+p2.age);
            //System.out.println("姓名:"+p2.name);
            System.out.println("正在吃饭!");
        }
        */
        
}

public class Test
{
        public static void main(String[] args)
        {
                Person p1 = null;
                Person p2 = null;
               
                p1 = new Person();
               
                //p1.eat();
                p1.name="李四";
                p1.age= 23;
               
                p1=p2;
                System.out.println("姓名:"+p2.name);
        System.out.println("年龄:"+p2.age);
        
                p1=null;
        }
}
运行这个程序时出现了空指针异常,本人新手求高手来解答。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

7 个回复

倒序浏览
p1=p2;
p2是null,
下面p2.name
p2.age就空指针异常了啊
应该是p2=p1;吧
回复 使用道具 举报
p1=p2的意思是p2指向的对象赋值给p1,y因为p2=null,所以p1=null;所以出现空指针异常,
想要把p1指向的对象赋值给p2,应该p2=p1.
回复 使用道具 举报
嗯,其实就是。当你先new p1的person并给p1赋值的时候。p1已经有了年龄和姓名。
但当你p1=p2的时候。p2初始化默认为null.那么也就意味着再次给p1赋值为了null.
既然都是空,打印出来就是空指针异常了。
还有一点要注意,最好别在主函数class前面加静态。
代码如下:
class Person
{
        String name;
        int age;
        /*
        public void eat()
        {
            //System.out.println("年龄:"+p2.age);
            //System.out.println("姓名:"+p2.name);
            System.out.println("正在吃饭!");
        }
        */
        
}

class Test
{
        public static void main(String[] args)
        {
                Person p1 = null;
                Person p2 = null;
               
                p1 = new Person();
               
                //p1.eat();
                p1.name="李四";
                p1.age= 23;
               
                p2=p1;
                System.out.println("姓名:"+p2.name);
        System.out.println("年龄:"+p2.age);
        
                p1=null;
        }
}
回复 使用道具 举报
p1 = new Person();//这里给p1分配了内存空间
p1.name="李四";//给p1的属性赋值
p1.age= 23;
当p1=p2时就将p1的值置空了(p2本身就为空,在内存中没有分配有存储空间),所以在p2.name时就会有空指针异常
回复 使用道具 举报
   p1=p2;//意思是把p2的值赋给p1,而你的目的是把p1赋p2,所以,换一下 就对了 p2=p1;
                System.out.println("姓名:"+p2.name);
回复 使用道具 举报
李平 初级黑马 2012-4-18 19:38:13
7#
p1 = new Person();但p2仍然是null
p1 = p2;意味着把 null 又赋给了p1
c此时p1为空,所以打印空指针异常了。
换成p2 = p1;
回复 使用道具 举报
哥们当然 是空的呀。你想想看,你是不是要把p1赋给p2呀,结果把p2赋给了p1。所以当然是空咯。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马