黑马程序员——对一道论坛题目的思考

                              ------- android培训java培训、期待与您交流! ----------

      在黑马论坛上看到这样一道题:判断最终结果是true还是false

 

代码片段1
Java
代码
public static void main(final String[] args) {
Integer a = new Integer(100);
Integer b = 100;
System.out.println(a == b);

代码片段2
Java
代码
public static void main(final String[] args) {
Integer a = 100;
Integer b = 100;
System.out.println(a == b);

代码片段
3
Java
代码
public static void main(final String[] args) {
Integer a = 156;
Integer b = 156;
System.out.println(a == b);
}

代码片段
4
Java
代码
public static void main(final String[] args) {
Integer a = Integer.valueOf(100);
Integer b = 100;
System.out.println(a == b);
}

一开始我通过网上查找资料,得出了答案。

代码片段1 false
代码片段2true
代码片段3
false
代码片段4 true

 

      后来看视频到基本数据类型包装新特性后才发现自己一开始,想的还是有些浅显了,虽然答案都是对的,但理解的并不深入。问题涉及到了好几个知识点,首先是

==是比较的两边是否指向同一个对象,其次Integer a=100其实就相当于

Integer a = new Integer(100),因为1.5出的新特性自动加包,直接将100封装为了对象,

所以Integer a = 100;Integer b = 100;其实也应该相当于两个对象,之所以ab指向了同一个对象,是因为java为了提高效率,初始化了-128--127之间的整数对象,所以在赋值

在这个范围内都是同一个对象。

  当数值超过后就是代码3的情况了:

Integer a = 156; 等效于Integera = new Integer(150);
Integer b = 156; 
等效于
Integer a = new Integer(150);
所向指向的是两个对象。

而代码4,等效于代码2Integer a = Integer.valueOf(100);相当于Integer a = 100在经过编译后的状态

                               -------android培训java培训、期待与您交流!----------

                                           详细请查看:http://edu.csdn.net/heima/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值