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两天问了
个问题就把我问倒了,想起来真有些惭愧。不过也好把事情弄清楚了,谢谢各位的热心解答!