黑马程序员技术交流社区

标题: 基本数据类型对象包装类新特性 [打印本页]

作者: 邓斌    时间: 2012-4-14 20:13
标题: 基本数据类型对象包装类新特性
最下面代码。是基本数据类型对象包装类新特性 这视频做的笔记。
对于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);

}
}


作者: 马强    时间: 2012-4-14 20:44
第一次 直接引用常量池里的 123。
第二次 new了两个对象 ==比较的是new的地址而不是里面的数字。
Integer有自己的比较方法,如果比较数,直接用equals
   Integer y= new Integer(123);
     Integer x= new Integer(123);
boolean a  = y.equals(x);
System.out.println(a);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2