Long 的== 与equals

遇到一个关于Long的问题,
Long i = 130L;
经过网络传输后,在jboss中执行
Long b = 130L;
i == b 判断时竟然没有返回true, 关于Long的自动装箱以前也看到过相关的东西,只是没有想到会被自己碰到。
经过测试java在对Long类型进行序列话的时候应该是根据基本类型来做的;在上面的执行程序应该可以等价如下:
Long i = Long.valueOf(130);//这个过程中会自动装箱,本身缓存-128--127中间的数字,其他会重新new

在网络传输的时候之前:
bef = Long.longValue();
objectOutputStream.writeLong(bef);

传输之后
long ret = objectInputStream.readLong();
Long i = Long.valueOf(ret); //同样不会自动装箱,重新new出来
Long b = Long.valueOf(130); //
i == b //false;

由此得出两个结论:
1、Long类型的比较,对于在-128-----127之间的数字,==,和equals比较是等价的,而对于不再这个范围的数字,比较应以equals为准。
2、Long类型,虽然实现了Serializable接口,但是其本身并不参与序列化,在序列话之前,将Long类型的数字转换为基本类型。在序列化之后,将基本类型转换为对应的包装类型。

8) 猜测,所谓的自动装箱,也就是在必要的时候,自动调用Number类型中的,valueOf(long、int、float、double)等方法,在需要的时候,又会转换为基本类型。。。

问题: java本身并不是完全的面向对象的语言,在1.5之后添加了自动装箱机制,这里引入这个东西的原因是什么呢? 仅仅是为了统一? 还是有其他考虑。
目前感觉包装类型的好处有,能够通过null判断是不是付过值,其他没有发现什么好处 :shock: :shock: :shock:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值