文章自动装箱的陷阱

自动装箱的陷阱

java 自动装箱 语法糖


针对java中的一些语法糖比如自动装箱,我们经常会遇到一些小陷阱,这是一个例子

/**
 * example in VM page 316
 */
public class Solution {
    public static void main(String args[]){
        Integer a = 1 ;
        Integer b =2 ;
        Integer c = 3 ;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g=3L;
        System.out.println(c ==d ); // true
        System.out.println(e ==f );//false 
        System.out.println(c ==(a + b));//true
        System.out.println(c.equals(a+b));//true
        System.out.println(g == (a+b));//true
        System.out.println( g.equals(a+b));// false 

    }
}

(1)是因为Integer对与-128至127的值进行缓存,将其存放在常量池中,因而c和d这两个referen实际上指向相同的内存地址,因而相等
(2)指向不同的内存地址,因而不等
(3)因为进行了算术运算所以自动拆箱,两者运算结果相等
(4)同样运算结果相等,自动装箱,相等,这里注意equals不处理数据类型转型的关系
(5)同(3)运算结果相等,
(6)因为equals不处理数据转型,因而Integer与Long相比较不等

对于这类问题只需要注意常量池 ,==不拆箱比较地址 , 算术运算拆箱, equals不处理类型转换这四点就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值