A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓斌 中级黑马   /  2012-4-14 20:13  /  1861 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最下面代码。是基本数据类型对象包装类新特性 这视频做的笔记。
对于1.5版本基本数据类型对象包装类新特性。
在byte范围内要怎么理解。
说没体现新特性。
    Integer y=123
    y=y/*x.intValue*/+2;
这段代码可以执行的。intValue是非静态的。所以需要对象调用。
那就Integer y=123 ==Integer  y= new Intege(123);
而。在byte范围内。
  Integer a =127;
  Integer b=127;
  sop("a==b:"+(a==b));  是ture的
//结果为true 因为a和b指向同一对象
//因为当数值在byte范围内容,对于新特性,如果改数值存在。就不会开辟新空间
//这上面成立的话  就和下面这段代码有矛盾了
Integer p=new Integer(127);
  Integer q=new Integer(127);
  sop("p==q:"+(q==p));

//p的数值时byte范围内。对于新特性应该就不会开辟空间了。所以q==p应该是ture ,.不过结果是false
//OK.我知道是两对象。不可能相等。但第一段代码 a和b也是两对象。不过a==b是ture 按照注释来说。p和q应该也是ture的。

我主要是想问。该怎么理解这个新特性或者这段代码?
本想理解为在byte范围内。新特性相同数值的对象时相等的。但这不行。q==p---false
如果理解Integer y=123 ==Integer  y= new Intege(123);  这也是不行的。是false   那Integer y=123 这句话到底做了什么操作?
对象肯定是创建了。应为  y=y/*x.intValue*/+2; 。
Integer y=123 ==Integer  y= new Intege(123)-----false; 而a==b ------ture   
//因为当数值在byte范围内容,对于新特性,如果改数值存在。就不会开辟新空间
这两是矛盾的。  到底应该怎么理解?



class IntegerDemo1
{
public static void main(String[] args)
{
  method();

  //Integer y=new Integer(123);
  Integer y=123;//自动装箱==new Integer(123);
  //1.5版本的新特新。不过要注意。Integer y=null;
  //y=null  就不能调用方法。
  //程序停止掉。空指针异常(RuntimeException)
  y=y/*x.intValue*/+2;
   //x+2:x进行自动拆箱,(x是一对象,x.intValue转化成基本数据类型,)
  //变成成了int类型,和2进行加法运算。
  //运算完后。在进行装箱赋给X
  sop("x="+y);

  Integer m =128;
  Integer n=128;

  sop("m==n:"+(m==n));
  Integer a =127;
  Integer b=127;
  sop("a==b:"+(a==b));
  //结果为true 因为a和b指向同一对象
  //因为当数值在byte范围内容,对于新特性,如果改数值存在。就不会开辟新空间
  //也就是在-127和+127范围内。Integer y=123 !=Integer new Integer(123)

  Integer p=new Integer(127);
  Integer q=new Integer(127);
  sop("p==q:"+(q==p));

}
public static void method()
{
  Integer x=new Integer("123");
  Integer y=new Integer(123);
  sop("x==y:"+(x==y));//2个对象肯定不相等。
  sop("x.equals(y):"+x.equals(y));//Integer复写了Object方法。用于比较两个数是否相等

}
public static void sop(String str)
{

  System.out.println(str);

}
}

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

1 个回复

倒序浏览
第一次 直接引用常量池里的 123。
第二次 new了两个对象 ==比较的是new的地址而不是里面的数字。
Integer有自己的比较方法,如果比较数,直接用equals
   Integer y= new Integer(123);
     Integer x= new Integer(123);
boolean a  = y.equals(x);
System.out.println(a);

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马