黑马程序员技术交流社区
标题:
Integer x=0;有几个对象
[打印本页]
作者:
hx32
时间:
2013-7-24 04:40
标题:
Integer x=0;有几个对象
本帖最后由 hx32 于 2013-7-26 05:47 编辑
视频中,毕老师讲到
Integer x=0相当于Integer x=new Integer(0);
Integer x=new Integer(0);是两个对象
Integer x=0;有几个对象?
作者:
の放下执著
时间:
2013-7-24 06:48
Integer x=0;在JDK1.5版本后会自动装箱成Integer x=new Integer(0);其实你也提到了,嘿嘿。这时有两个对象,一个是new在堆内存中的Integer(0),一个是在栈内存中的引用x,x指向堆内存。个人理解,嘿嘿。
作者:
周骑骏
时间:
2013-7-24 06:56
是一个对象,使用了装箱解箱技术,就是一个是堆中创建new integer(0),而X只是一个指向该对象的引用,要记住没有new的话,系统就不会分配内存的
作者:
月亮人生
时间:
2013-7-24 07:55
本帖最后由 月亮人生 于 2013-7-24 07:58 编辑
class Demo
{
public static void main(String[] args)
{
Integer a = new Integer(55);
Integer b = new Integer(55);
Integer c = 55;
Integer d = 55;
Integer e = 155;
Integer f = 155;
System.out.println(a==b);//false //这里比较的是两个对象的地址,new了两个对象,开辟了两个不同的空间,所以这两个空间的地址当然不一样了,
//只是这两个对象里边的值都指向的是常量池里边的 55.
System.out.println(c==d);//true //Integer类的内部, 有一个常量静态数组, 在Integer类被加载的时候, 预先创建了-128 ~ 127的Integer对象, 所以当声明的Integer类型变量的值在-128 ~ 127的范围内时, 不会新创建对象, 直接引用数组中创建好的,否则将会创建对象。所以c和d这两个都直接引用的是Integer内部的55.所以相等。e和f这两个的值都超出了范围 ,所以要重新建立对象,故,e和f不相等。
System.out.println(e==f);//false
}
}
作者:
熊纪达
时间:
2013-7-24 08:43
一个对象啊。Integer在创建对象的时候,值在-128-127之间,会将值放入缓冲池,例如Integer x=0,就会把0放入缓冲池,下次再创建Integer对象时,就直接饮用0这个值,因为引用的是同一个值,所以也x指向的是同一个对象。
作者:
王峰230321
时间:
2013-7-24 09:16
本帖最后由 王峰230321 于 2013-7-24 09:31 编辑
个人理解:
按照java的对象 封装的机制来看. 我个人觉得. 如果是出现了= 的话. 那么情况应该就是. 赋值行为, 那么也就是, =的左边等于 等号的右边, 也就是说. 是两个对象 在互相比较,然后结果为真.
同样是个人理解. "0" 这个数字本身就应该是作为对象存储在intger里,
Integer x=0 做的行为 就相当于. new了一个integer个对象 名字是x . 然后 把0 这个"对象"找出来, 之后做了一个一维运算.. . 两边相等.. 所以个人觉得. 这个应该就是两个对象. 相等...
作者:
zhouchao
时间:
2013-7-24 09:26
Integer x=0相当于Integer x=new Integer(0);
Integer x=new Integer(0);是两个对象
这里的是两个对象的意思是
Integer x=0; 是一个对象
Integer x=new Integer(0);也是一个对象
所以Integer x=0;和Integer x=new Integer(0);是两个对象
Integer x=0;
Integer x=new Integer(0);
Integer x=0;
这三句在一起就是一共有三个对象
我是这么理解的 不知道对不对
作者:
hx32
时间:
2013-7-24 20:37
哪位给个权威的说法?楼上各位的分析让我更迷糊了……
作者:
Mr_Free
时间:
2013-7-25 20:38
Integer x=0;只有一个对象, x是Integer的类类型变量,0作为Integer的对象。
而Integer x =new Integer(0); 这句话里面new开辟Integer对象x 的内存空间,而0也是Integer的对象,所以是2个对象。
作者:
李政
时间:
2013-7-25 22:11
是不是在第13天的最后一节讲的呢?我看了一遍没有说Integer x =new Integer () 是两个对象啊
作者:
草貌路飞
时间:
2013-7-25 22:34
好像只有字符串的String s= new String("tset");是创建了两个对象吧
作者:
denghui1010
时间:
2013-7-25 22:42
显然只有一个对象,int类型的0作为参数传递给Integer类的构造函数,new了一个Integer出来
作者:
刘乃宽
时间:
2013-7-26 01:32
Integer x=0;只有一个对象
x是Integer的类类型变量,0作为Integer的对象。
Integer x=0;
Integer x=new Integer(0);
Integer x=0;
这样是三个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2