百度问问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框架,没问题了~挺怀念当时坚持折腾捣鼓的自己的~
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设值时对象是存在的,而且只是部分方法报空指针