Java封装一个登陆类_Java-一个关于java的封装类自增问题

这个问题反编译一下字节码就知道了:javap -verbose Test.java,可以看看main的方法体

public static void main(java.lang.String[]);

Code:

Stack=3, Locals=6, Args_size=1

0: ldc #2; //String key

2: astore_1

3: sipush 1000

6: invokestatic #3; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;

9: astore_2

10: new #4; //class java/util/HashMap

13: dup

14: invokespecial #5; //Method java/util/HashMap."":()V

注意看3:sipush 1000:把1000push到堆栈上,

关键在这里6:invokestatic #3//Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;

这里用1000调用Integer.valueOf方法,也就是说最终放入map的是Integer.valueOf(1000)

再看看valueOf方法

public static Integer valueOf(int i) {

if(i >= -128 && i <= IntegerCache.high)

return IntegerCache.cache[i + 128];

else

return new Integer(i);

}

返回的是一个新的Integer,显然和传入的参数是不同的引用。

也就是说map.put(key, a);等同于map.put(key,Integer.valueOf(a))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值