A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hx32 高级黑马   /  2013-7-24 04:40  /  3794 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hx32 于 2013-7-26 05:47 编辑

视频中,毕老师讲到
Integer x=0相当于Integer x=new Integer(0);
Integer x=new Integer(0);是两个对象
Integer x=0;有几个对象?

12 个回复

倒序浏览
Integer x=0;在JDK1.5版本后会自动装箱成Integer x=new Integer(0);其实你也提到了,嘿嘿。这时有两个对象,一个是new在堆内存中的Integer(0),一个是在栈内存中的引用x,x指向堆内存。个人理解,嘿嘿。
回复 使用道具 举报
是一个对象,使用了装箱解箱技术,就是一个是堆中创建new integer(0),而X只是一个指向该对象的引用,要记住没有new的话,系统就不会分配内存的
回复 使用道具 举报
本帖最后由 月亮人生 于 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
}
}

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 貌似所答非所问!辛苦分

查看全部评分

回复 使用道具 举报
一个对象啊。Integer在创建对象的时候,值在-128-127之间,会将值放入缓冲池,例如Integer x=0,就会把0放入缓冲池,下次再创建Integer对象时,就直接饮用0这个值,因为引用的是同一个值,所以也x指向的是同一个对象。
回复 使用道具 举报
本帖最后由 王峰230321 于 2013-7-24 09:31 编辑

个人理解:  
按照java的对象 封装的机制来看.    我个人觉得.  如果是出现了= 的话.  那么情况应该就是.  赋值行为,  那么也就是, =的左边等于 等号的右边,   也就是说. 是两个对象 在互相比较,然后结果为真.
同样是个人理解.      "0" 这个数字本身就应该是作为对象存储在intger里,   
Integer x=0  做的行为 就相当于.   new了一个integer个对象 名字是x  .   然后 把0 这个"对象"找出来, 之后做了一个一维运算.. .   两边相等..  所以个人觉得. 这个应该就是两个对象. 相等...
回复 使用道具 举报
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:37
8#
哪位给个权威的说法?楼上各位的分析让我更迷糊了……
回复 使用道具 举报
Integer  x=0;只有一个对象, x是Integer的类类型变量,0作为Integer的对象。

而Integer x =new Integer(0);  这句话里面new开辟Integer对象x 的内存空间,而0也是Integer的对象,所以是2个对象。
回复 使用道具 举报
是不是在第13天的最后一节讲的呢?我看了一遍没有说Integer x =new Integer () 是两个对象啊
回复 使用道具 举报
好像只有字符串的String s= new String("tset");是创建了两个对象吧
回复 使用道具 举报
显然只有一个对象,int类型的0作为参数传递给Integer类的构造函数,new了一个Integer出来
回复 使用道具 举报
Integer  x=0;只有一个对象
x是Integer的类类型变量,0作为Integer的对象。
Integer x=0;
Integer x=new Integer(0);
Integer x=0;
这样是三个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马