黑马程序员技术交流社区

标题: 看了张老师交通灯视频的都来帮我解析下这个问题吧!! [打印本页]

作者: 徐青松    时间: 2014-2-24 16:13
标题: 看了张老师交通灯视频的都来帮我解析下这个问题吧!!
public Lamp blackOut() {
                this.lighted = false;
                if (opposite != null)
                        Lamp.valueOf(opposite).blackOut();

                Lamp nextLamp = Lamp.valueOf(next);//为啥这里把Lamp nextLamp=null换成了
//=Lamp.valueOf(next);运行结果就会有问题呢。这里怎么先赋值初始化和先赋值null,然后在代码里再赋具体值差别很大呀!
                if (next != null) {
                        System.out.println("绿灯从" + name() + "方向变成----》" + next + "方向");
//                        nextLamp = Lamp.valueOf(next);
                        nextLamp.light();
                }
                return nextLamp;
        }

作者: e.c    时间: 2014-2-24 16:25
有的灯nextLamp为null。(相对应的灯没有nexLamp属性)
所以直接这样Lamp nextLamp=Lamp.valueOf(next);会出错。
应该先判断nextLamp是否为null,不为空才能取到灯。
作者: 徐青松    时间: 2014-2-24 17:11
e.c 发表于 2014-2-24 16:25
有的灯nextLamp为null。(相对应的灯没有nexLamp属性)
所以直接这样Lamp nextLamp=Lamp.valueOf(next);会 ...

不是呀,我判断的是next不为空,不是nextLamp不为空,nextLamp只是一个Lamp变量用于记录下一个灯而已
作者: flying    时间: 2014-2-24 18:29
徐青松 发表于 2014-2-24 17:11
不是呀,我判断的是next不为空,不是nextLamp不为空,nextLamp只是一个Lamp变量用于记录下一个灯而已 ...

  Lamp nextLamp = Lamp.valueOf(next)
next为空的话  这里是不是就该出错了
作者: 徐青松    时间: 2014-2-24 19:24
flying 发表于 2014-2-24 18:29
Lamp nextLamp = Lamp.valueOf(next)
next为空的话  这里是不是就该出错了

但是没报错呀
作者: 午夜b'Boy    时间: 2014-2-24 20:14
徐青松 发表于 2014-2-24 19:24
但是没报错呀

这里如果没错,nextlemp可能就接收到一个null对象,倒至后面代码错误!
作者: 徐青松    时间: 2014-2-26 09:30
午夜b'Boy 发表于 2014-2-24 20:14
这里如果没错,nextlemp可能就接收到一个null对象,倒至后面代码错误!

我们分两种情况:1、next=null 2、next!=null。当next=null时,Lamp nextLamp = Lamp.valueOf(next)这里获得的nextLamp为null吧?!我是觉得为null的。那和初始化时直接给他赋值null没区别!当next!=null时,在外面和在里面赋值都没区别呀!我是哪里没考虑到呢?




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