整形自动拆包引起的NPE

在比较运算符运行前,会强制类型转换 左值和右值;如果有一侧的值是null,则编译不过去,如果运行时才能确定左值或右值真实值,则运行时会抛出NPE。

	public static void main(String[] args) {
		Integer a = null;
		System.out.println(1 == null); //The operator == is undefined for the argument type(s) int, null
		
		// java.lang.NullPointerException
		System.out.println((int) a);   
		
		// java.lang.NullPointerException
		System.out.println(1 == a);
		
		// java.lang.NullPointerException
		System.out.println(a == 1);
	}

1 对象的比较、Integer类的flighWeight模式

	public static void main(String[] args) {
		Integer a = 1000;
		Integer b = 1000;
		System.out.println(a == b);	<span style="color:#ff0000;">	//false</span>
		System.out.println((int) a == b);	// true
		System.out.println(a == (int) b);	// true
		System.out.println(a.equals(b));	// true
		
		Integer c = 127;
		Integer d = 127;
		System.out.println(c == d);		// true (-128~127缓存了对象,每次比较使用cache里的对象)
		
		c = 128;
		d = 128;
		System.out.println(c == d);		// true
	}

2 对象比较的右值可以是null,prime类型的右值不能是null

	public static void main(String[] args) {
		Integer a = 1000;
		System.out.println(a == null);		//false
		System.out.println((int)a == null);		//The operator == is undefined for the argument type(s) int, null
	}


3 2016-8-19日又发生一次NPE的事件:

改前的逻辑;

rulesDO.getSettlementPriod() 
这句可能为null

        if ( rulesDO != null &&  WEEKLY_SETTLEMENT.getType().intValue() == rulesDO.getSettlementPriod() ) {	
		......		
        }

改后的逻辑

        Long settlementPeriod  = nbSettlementRulesDO.getSettlementPriod();
        if (settlementPeriod != null && WEEKLY_SETTLEMENT.getType().intValue() == rulesDO.getSettlementPriod()) {
<span style="white-space:pre">	</span>       ......
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值