黑马程序员技术交流社区

标题: 关于 ==比较符的疑问 [打印本页]

作者: Moonboy2014    时间: 2014-6-29 22:33
标题: 关于 ==比较符的疑问
interface Person
{
        abstract void show();
}

class Student implements Person
{
        public void show()
        {
                System.out.println("student run");
        }
}

class ProxyStudent implements Person
{
        private Student s;
        public void show()
        {
                before();
                if(s == null)//这个比较是什么意思,为什么不直接new一个Student对象呢?
                {
                        s = new Student();
                }
                s.show();
                after();
        }
        public void before()
        {
                System.out.println("do something before show");
        }
        public void after()
        {
                System.out.println("do something after show");
        }
}
public class ProxyDemo {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                        ProxyStudent ps = new ProxyStudent();
                        ps.show();
        }

}
请教各位高手,s==null是说明意思,为什么要进行这个比较,为什么改成s!=null 就提示空指针异常了,知道的详细解答一下,不胜感激





作者: ソi苆僞lè袮    时间: 2014-6-30 00:44
创建了一个Student类型的变量s,但是它的对象的引用是空的
既然它指向的是空的对象,就不能去操作它,调用它的方法,所以这里判断一下这个对象的引用如果为空,那么就创建一个新的对象;
把判断条件改成s!=null,当你对象的引用是空的时候就不会创建新的对象了,也就会报空指针异常了
作者: fantacyleo    时间: 2014-6-30 01:41
  private Student s; 定义了一个实例变量,当你new proxystudent时会自动初始化为null。你把s==null改成s!=null,那么s=null时就不会new一个student对象,你执行s.show()的依然是那个被初始化为null的student对象,当然会报空指针异常了
作者: on-on    时间: 2014-6-30 09:29
本帖最后由 on-on 于 2014-6-30 09:31 编辑

如果s==null,则创建对象如果改成s!=null,则创建对象,那么当s==null的时候,不创建对象,后面调用s的时候,s的引用还是空,它当然是会报空指针异常了喽。

作者: Moonboy2014    时间: 2014-6-30 10:56
fantacyleo 发表于 2014-6-30 01:41
private Student s; 定义了一个实例变量,当你new proxystudent时会自动初始化为null。你把s==null改成s! ...

恩,回答的很透彻,感谢:loveliness:
作者: Moonboy2014    时间: 2014-6-30 10:57
ソi苆僞lè袮 发表于 2014-6-30 00:44
创建了一个Student类型的变量s,但是它的对象的引用是空的
既然它指向的是空的对象,就不能去操作它,调用 ...

:handshake
作者: Moonboy2014    时间: 2014-6-30 10:58
on-on 发表于 2014-6-30 09:29
如果s==null,则创建对象如果改成s!=null,则创建对象,那么当s==null的时候,不创建对象,后面调用s的时 ...

:handshake




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2