JAVA包装器类的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 08:07:48
public class Shiyan
{
public static void main(String[] args)
{
int i=new Integer(12222); //i和q两变量是指向同一个对象?
int q=new Integer(12222); //i和q应该创建了二个对象吧?
Integer ii=1222; //在这ii和qq又为什么会创建二个对象?
Integer qq=1222;
Integer iii=12; //对-128~127的数好象是像int一样保修在栈中?
Integer qqq=12;
if(i==q) //为什么相等?
System.out.println("yes1");

if(ii==qq)
System.out.println("yes11");

if(iii==qqq)
System.out.println("yes111");
}
}
/*结果:
yes1
yes111
*/
主要问题是i和q,为什么i==q,为什么只创建了一个对象?而ii,qq创建了两个,这方面有点不太明白。谁帮个忙说明一下
谢谢!
比如说Integer i=12;不是相当于Integer i=new Integer(12):吗?

int 型比较的话,只比较大小
Integer 用== 比较的是地址

不一定一样。。如果在内存里面已经存在12的话,
Integer i=12,i的地址会直接指向原有的12
而Integer i=new Integer(12),不管原来有没有12,都会新建一个对象。
是个新地址

第一个相等时因为你把 Integer 类型转化成了int类型,Integer类型和int类型可以自动转化。所以第一个相等。

第二个是jak1.5的新特性 ,当定义个Integer类型小于128的时候就会自动转化成int类型,而大于128的时候则不能自动转化。

不是 它会自动转型成int类型