黑马程序员技术交流社区

标题: 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