wang_jian_bo 2008-11-12 23:30
浏览 195
已采纳

我被我的同学问住了,关于Integer的引用,大家帮忙看看

Integer i1,i2;
i1=5;
i2=i1;
i1=7;
System.out.println(i2);
答案是5,但是Integer是对象所以i2=i1因该是引用,所以i1=7以后i2因该也等于7
java水平很菜,不知道该如何解释。在javaEye中看到过关于字符串对象有常量池
这个概念,但是套到这里好像不合适,毕竟Integer不向字符串一旦生成就不可改变,
改变后就重新在内存中生成。
[b]问题补充:[/b]
Integer i1,i2;
i1=5;
i2=i1;
i1=7;
System.out.println(i2);
答案是5,但是Integer是对象所以i2=i1因该是引用,所以i1=7以后i2因该也等于7
java水平很菜,不知道该如何解释。在javaEye中看到过关于字符串对象有常量池
这个概念,但是套到这里好像不合适,毕竟Integer不向字符串一旦生成就不可改变,
改变后就重新在内存中生成。

我现在基本上明白了,i2=5是合理的,因为i1由原来的Integr(5)变成了Integer(7)地址改变了,而i2还是原来的地址。以前看到过一篇文章是将字符串对象、常量池这些,而且字符串每
进行一次赋值就需要重新生成一个对象然后重新对字符串变量进行赋值。我当时以为只有字符串会这样而
Integer等包装类是不需要的,因为每一个包装类都有一个基本类型属性,改变值只需要改变属性值就可以
了,今天早上查了下api发现这些包装类都没有set方法可以改变基本类属性!,原来对这些包装类的改变
也和字符串一样是通过new一个新对象来实现的。来这公司写jsp也有小半年了,我同学刚学java两天问了
个问题就把我问倒了,想起来真有些惭愧。不过也好把事情弄清楚了,谢谢各位的热心解答!

  • 写回答

4条回答 默认 最新

  • iteye_14081 2008-11-13 00:29
    关注

    针对你的那个具体问题:
    [code="java"]Integer i1,i2;
    i1=5;
    i2=i1;
    i1=7;
    System.out.println(i2);[/code]

    第一步:
    i1----->null
    i2----->null

    第二步:
    i1----->Integer(5)<-----i2

    第三步:
    Integer(5)<-----i2
    i1----->Integer(7)

    所以输出是5

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退