java初学一些面对对象的问题与心得(一)

  今天在菜鸟回看基础数据类型的时候,看到一条笔记,然后看到自动转换不太明白引申出关于包装类的一个问题,然后又看到java踩坑笔记,感觉文章说的并不十分清晰,我自己琢磨了一会,决定起码先把问题记下来.

Integer x = new Integer(1000);//包装类,先创建一个new Integer()空间,然后指向1000,
Integer y = 1000;
Integer z = 1000;
System.out.println(x == y); //false
System.out.println(x == z); //false
System.out.println(y == z); //false

三个全是false 意味着这三者是空间地址都不相同,也就是三者都是new了一个新对象.于是我用反编译器看看源码.
Integer x = new Integer(1000);
Integer y = Integer.valueOf(1000);
Integer z = Integer.valueOf(1000);

说实话,仍然不太理解,然后看看valueOf方法的源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
到这里,理解了,包括最早的入池的概念,IntegerCache这个类里有个数组叫cache[],如果在-128-127之间,第一次引用时入池,再次引用直接调用.如果不再new一个新的对象.所以1000不在范围内,每次都需要new一个新的对象,所以创建了三个对象.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值