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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王鹏 中级黑马   /  2013-3-17 14:32  /  1149 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-王鹏 于 2013-3-17 22:41 编辑
  1. class Person
  2. {
  3.         public void checkName(String name)
  4.         {
  5.                
  6.                 //if(name.equals("lisi"))//NullPointerException
  7.                 if("lisi".equals(name))//if(name!=null && name.equals("lisi"))
  8.                         System.out.println("YES");
  9.                 else
  10.                         System.out.println("no");
  11.         }
  12. }

  13. main()
  14. {
  15.         Person p = new Person();
  16.         p.checkName(null);
  17. }
  18. //毕老师留下的代码,1.我想知道要怎样补充代码才会实现运行异常?
  19. //                   2.怎样才能避免空指针异常?
复制代码
希望可以解答详细点,谢谢!

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

1 个回复

倒序浏览
因为equals需要对象去调用,但是与这个对象相比的可以是任何东西,包括为空(null).所以在checkName()里面判段的时候,你如果用if(name.equals("lisi")),在程序中就会产生异常,如果用if("lisi".equals(name)),则就只会输出是与不是。
下面是补全的代码(不会有异常):
  1. class Person

  2. {

  3.         public void checkName(String name)        //定义比对的方法

  4.         {
  5.             if("lisi".equals(name))                //这里需注意是lisi与传进来的比,还是传进来的值与lisi相比。

  6.                  System.out.println("YES");
  7.            else
  8.                  System.out.println("no");
  9.         }

  10. }
  11. class CheckDemo
  12. {
  13.         public static void main(String[] args)
  14.         {
  15.                 Person p = new Person();
  16.                  p.checkName(null);
  17.         }
  18. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

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