注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Reloadbug

黑夜给了我黑色的眼睛,我用她寻找Bug

 
 
 

日志

 
 

SCJP 310-055 考试中的==判断  

2007-01-09 22:35:17|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    首先请您看这样一个试验:

     Integer a = 10;
    Integer b = 10;
    Integer c = 1000;
    Integer d = 1000;
    if(a == b ){
      System.out.println("a == b");
    }
    if(c == d ){
      System.out.println("c == d");
    }

    您猜猜结果会输出什么?答案是:

     a == b

    为什么呢?同样是整数为什么a与b相等,而c与d不等呢?原来Java在1.5中有这样的规定。对于以下的封装类,当他们的基本值相等的时候他们==的结果是true

    1。Boolean
    2。Byte
    3。Character from \u0000 to \u007f (7f 是十进制的 127 )
    4。Short and Integer from -128 to 127

    也就是说当Integer的值在-127到128之间 的时候只要他们都被赋予相同的基本类型的值。那么他们就引用相同的引用。当超出范围了他们就引用不同的引用。

    上面的代码在1.4版本以下相当于如下代码:

     Integer a = new Integer(10);
    Integer b = a;                                 //超出范围
    Integer c = new Integer(1000);    //范围以内
    Integer d = new Integer(1000);
    if(a == b ){
      System.out.println("a == b");
    }
    if(c == d ){
      System.out.println("c == d");
    }

    java为了节省内存,将范围内的Integer对象保存到一个固定的内存里,所有范围以内的Integer对象都引用同一个对象。但这只局限于使用自动装箱进行初始化的时候。使用new关键字初始化的时候和正常情况一样。

  评论这张
 
阅读(116)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017