最下面代码。是基本数据类型对象包装类新特性 这视频做的笔记。
对于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);
}
}
|