You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:23:11