百度问问java如何判断对象是不是为空时,报空指针异常,如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度问问java如何判断对象是不是为空时,报空指针异常,如何解决?相关的知识,希望对你有一定的参考价值。

我实例了一个对象
book book=new book();
查询:
book=bookService.findBook(xxxx);
if(!book.equals("")&&book!=null)

报空指针异常,如何解决,才不会报空指针异常?

比较好的写法
book=bookService.findBook(xxxx);

if(book != null && !book.equals(""))



Java逻辑判断都是从左边开始的,所以如果book为null那么后面的equals就不会执行,也就不会报nullPointerException了
参考技术A if(!book.equals("")&&book!=null)这一段修改一下即可:
第一种:if(book!=null&&!book.equals(""))。就是说先判空,再比较
第二种:if(!"".equals(book))。这样也可以。就是说让equals前边的那个参数为一个确认非null的值
参考技术B if(!book.equals("")&&book!=null)

改成
if(book!=null)
参考技术C if(bookService!=null)
book=bookService.findBook(xxxx);
if(book!=null)
//dosomething

spring bean注入报空指针null,但set设值时对象是存在的,而且只是部分方法报空指针

这里打印costDao是有值的,不为空

这里前两个不为空,正常,但调用其他方法就报空指针,很郁闷!

这是部分bean配置

这是报错信息
百度了一天了,做了许多调整,没用,所以求助,谢谢各位提点下
两年前的问题了,都从学生走向工作岗位了~谢谢各位的回答,当时是在原有的框架基础上又整合spring的,出了问题~后来是新建项目,重新搭了一套ssh框架,没问题了~挺怀念当时坚持折腾捣鼓的自己的~

1、看来你很不会看异常?
2、上面都说了错在哪了,你没看到,看异常的第一行,ICostServiceImpl类的48行?
3、空指针是最好找的问题,肯定是哪个引用指向了一个空的对象。
4、有调用方法的对象,看这个对象是不是空的,先看程序执行到哪了,action还是service,还是dao里,缩小范围,找到了哪层,看下是哪个变量还是对象为空。
5、你new了一个ICostServiceImpl这个类的对象,这个对象调用了getCost()方法,看下这个对象是不是空的,另外看下CostDetaiAction里的execute这个方法,现在action里找,再service。
6、耐心点,这个要一天。追问

我已经找到costDao为空 ,在第二个图片注释部分已经写出,我现在想知道为什么,调用48行的方法会报错,同样调用42行也会报错,现在是在原来的项目中加入spring框架,不是很熟练

追答

1、CostDetaiAction的execute方法出错了,说明异常就在action-》service-》dao这一个流程中的某个位置。
2、你打印costDao,这是一个对象,打印肯定有值了,值好像是对象名@.....。

3、你确定startCost方法的costDao为空吗?你能不要打印对象?打印对象都是有值,打印里面 的属性好吧。再确认下,亲,打印测试千万别打印对象。

追问

确定startCost方法的costDao为空,一涉及到那个方法就会报错,前面的service都测试过了,不空

追答

一般dao的对象在service里面用到,你写在哪?你总说service没错,你的startCost方法在ICostServiceImpl里面被调用了,因为costDao你定义在了service里,而刚好为空,你说错在哪?

参考技术A 这个问题貌似和我的有点像,我也是空指针操作,但是我单独在对象工厂里运行main函数测试是完全可以输出的。最后找了半天是 我的bean.xml配置文件里的某两行的顺序写反了(Dog和Service),然后颠倒过来,发现程序好了。暂时还不知道深层次原因是什么。 参考技术B 这个是应为你struts中class名字与bean中class的名字不同,匹配不到,所以是空,,看看你JSP页面对应的struts2中action的class和beans中与之对应的class

以上是关于百度问问java如何判断对象是不是为空时,报空指针异常,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

spring bean注入报空指针null,但set设值时对象是存在的,而且只是部分方法报空指针

mybatis如何判断空时不循环数组是不是为空?

java:用action获取了一个复选框checkbox的值,如何判断它的值是不是为空?

java 判断所有参数是不是为空

mybatis 如何判断数组是不是为空,空时不循环数组

为啥判断队列是不是为空时只需比较队首指示和队尾指示是不是相等即可?