Integer i1,i2;
i1=5;
i2=i1;
i1=7;
System.out.println(i2);
答案是5,但是Integer是对象所以i2=i1因该是引用,所以i1=7以后i2因该也等于7
java水平很菜,不知道该如何解释。

解决方案 »

  1.   

    LZ看来是C的 *a, a, (*a) 没分清楚,呵呵。
      

  2.   

    我记得Integer在某个范围内好象是有cache的,似乎是-127到128之间...,也就是说在这个范围内相当于String一类的问题
      

  3.   

    Integer i1,i2;
    i1=5;
    i2=i1;
    i1=7;
    i2=i1;
    System.out.println(i2); 你这样i2才等于7
      

  4.   

    查到个资料,不知道准确与否,去看看我开的另一贴
    http://topic.csdn.net/u/20081113/10/93a5dd42-f5c7-4360-89df-a5ce08f0db27.html
      

  5.   

    基本数据类型(含类型对象)按值传递,其他对象类型按引用。可以看下这篇帖子:
    http://www.javaeye.com/post/629894?page=1
      

  6.   


    String s1, s2;   //声明两个引用
    s1 = "1";   //s1引用指向字符串"1"
    s2 = s1;   //s1引用赋予s2,s2引用也指向字符串"1"
    s1 = "2"; //s1引用指向字符串"2",跟随s2引用没关系
      

  7.   

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

  8.   

    我的理解:
    Integer i1,i2; 
    i1=5; //给i1分配区域A
    i2=i1; //i2和i1都代表的是区域A
    i1=7; //给i1分配区域B(此过程不会影响到A区域的值)
    System.out.println(i2);//i2代表的是A区域,所以它的内容是5