调用applyCoupon()方法后出现java.lang.NullPointerException的原因排查
解决你的NullPointerException和字符串比较问题
首先,咱们先搞定那个烦人的java.lang.NullPointerException:
你在main方法里虽然创建了Product和Category的实例,但从来没把Category对象赋值给Product的category成员变量!Product类里的category默认是null,当你调用applyCoupon()的时候,尝试调用category.getCategoryName(),这时候null调用方法肯定会抛空指针。
然后还有个隐藏的坑:你用==来比较字符串,这在Java里是比较对象的引用地址,不是实际的字符串内容,哪怕两个字符串内容一样,只要不是同一个对象,==都会返回false,应该用equals()或者equalsIgnoreCase()来比较。
修复后的完整代码:
main类:
public class basicjava{ public static void main(String args[]){ Product product=new Product(); Category category=new Category(); category.setCategoryName("book"); // 关键:把创建好的Category对象关联到Product上 product.setCategory(category); product.applyCoupon(); } }
Product类:
public class Product { private Category category; Product(){ } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } public void applyCoupon(){ // 先判断category不为null,再用equals比较字符串内容 if (category != null && "book".equals(category.getCategoryName())) { System.out.println("book"); } else { System.out.println("page"); } } }
Category类:
public class Category { private String categoryName; Category(){ } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } }
额外小建议:
- 以后在调用对象的方法前,最好先判断对象是否为null,从根源避免空指针异常。
- 永远记得用
equals()比较字符串内容,除非你确实想验证两个字符串是不是同一个内存对象。
内容的提问来源于stack exchange,提问作者Alltime Boxing
相关产品推荐
相关产品推荐

