您现在的位置: 爱51代码网 >> 范文 >> 文章正文
java外覆类Integer 如何查看reference

java外覆类Integer 如何查看reference

Integer i = new Integer(1); Object oi = i; System.out.println("oi add is: " + oi);           i ++; Object oii = i; System.out.println("Integer i is: " + i); System.out.println("oii add is: " + oii);


按理说,java的外覆类,只能在初始化时设定其值,不能在产生i后再改变它的值(i++)。
但是像上面代码中表示的那样,其实可以用i++,而且打印出i的值也确实+1了。
我想验证一下,是不是i++的过程中,java默认重新new了一个Integer,并让i指向了这个新的Integer,但是i++前后,i的地址打印不出来,即使向上转型为Object类后,打印出来的还是1 和2,不是地址。
oi add is: 1
Integer i is: 2
oii add is: 2

请教各路大神,这个i++到底是咋回事,是重新new了一个Integer对象吗,还是怎么实现的?
and,怎么才能把Integer指向的地址打印出来呢

看一下Integer中的构造方法和hashcode方法:
private final int value;

 public Integer(int value) {
this.value = value;
    }

 public int hashCode() {
return value;
    }
其它类的hashcode方法,例如HashMap中的:
 public int hashCode() {
int h = 0;
Iterator<Entry<K,V>> i = entrySet().iterator();
while (i.hasNext())
    h += i.next().hashCode();
return h;
    }
Thread类中的hashcode方法:
public native int hashCode();

ok,hashcode是经过计算后的所谓地址,有些可以可以看得见,有些看不见,但是要知道的是Integer里面就是返回的value的值!

j和i指向的根本就不是同一块内存,Integer j = i;表示用i的值去构造j,而不是生命了另一个引用,包装器类跟普通的类在这点上是有本质区别的。

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    lotus代理中LS如何将字符串保存到
    在lotus BS系统里怎样方便实现统
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    在lotus BS系统里怎样方便实现统
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    hm.get(r)取出来的值直接在h
    怎样用ajax提交表单来代替fo
    easyui的treegrid无法加载数
    myeclipse8.6怎么配置免安装
    怎么查看开发包jar里源代码
    Java中UUID的代替方法?Orac
    POI 导入Excel 提示Leftover
    整合ssh后如何获取同一个ses
    通过IP获取局域网内手机的Ne
    Hibernate优缺点有哪些
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |