关于Integer类和Map的疑问

就是大力水手 2013-12-02 02:39:21

HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
Integer r = new Integer((int)(Math.random() * 20));
if( hm.containsKey(r) ){
//hm.get(r) ++;编译器报错
Integer kk = hm.get(r);
kk ++;//能通过编译
}


通过hm.get(r)取出来的应该是一个Integer类,直接在hm.get(r)的基础上++,编译器报错,但是如果重新赋值给kk后,再把kk ++,就能通过编译,这是为啥呢?
...全文
404 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ganshenml 2013-12-02
  • 打赏
  • 举报
回复
引用 12 楼 ChunAmy 的回复:
[quote=引用 6 楼 ganshenml 的回复:] [quote=引用 5 楼 u011935764 的回复:] [quote=引用 4 楼 ganshenml 的回复:] 一个为声明的变量可以直接进行++操作? hm.get(r)只是一个值,连声明都没有,如何编译通过?
这个我也看了半天,你这比较靠谱啊,学习了[/quote]我蒙的![/quote] 哈哈,真是蒙的? 感觉有一定的道理,就像是 1++ 肯定是不行的,应该是 i ++[/quote]就是蒙的!
就是大力水手 2013-12-02
  • 打赏
  • 举报
回复
引用 6 楼 ganshenml 的回复:
[quote=引用 5 楼 u011935764 的回复:] [quote=引用 4 楼 ganshenml 的回复:] 一个为声明的变量可以直接进行++操作? hm.get(r)只是一个值,连声明都没有,如何编译通过?
这个我也看了半天,你这比较靠谱啊,学习了[/quote]我蒙的![/quote] 哈哈,真是蒙的? 感觉有一定的道理,就像是 1++ 肯定是不行的,应该是 i ++
就是大力水手 2013-12-02
  • 打赏
  • 举报
回复
引用 9 楼 u010111184 的回复:
[quote=引用 7 楼 ChunAmy 的回复:] [quote=引用 1 楼 fangmingshijie 的回复:] hm.get(r)++这个意思是: hm.get(r)=hm.get(r)+1; 你认为上面成立吗?
哦~~~了然了,确实有问题,感谢~~ 还想顺便问一下,对于外覆类Integer,书上说只能给它赋初值,之后不能修改。那么这里kk ++是怎么实现的呢?会不会是重新new了一个Integer,然后让kk指向了这个新的对象呢?[/quote] 测试了下,目测是指向不同对象的~k++之后的k值和get(r)不同~[/quote] 谢啦,确实是这样,在另外一个帖子里看到的:“j和i指向的根本就不是同一块内存,Integer j = i;表示用i的值去构造j,而不是生命了另一个引用,包装器类跟普通的类在这点上是有本质区别的。”
逍遥jc 2013-12-02
  • 打赏
  • 举报
回复
引用 7 楼 ChunAmy 的回复:
[quote=引用 1 楼 fangmingshijie 的回复:] hm.get(r)++这个意思是: hm.get(r)=hm.get(r)+1; 你认为上面成立吗?
哦~~~了然了,确实有问题,感谢~~ 还想顺便问一下,对于外覆类Integer,书上说只能给它赋初值,之后不能修改。那么这里kk ++是怎么实现的呢?会不会是重新new了一个Integer,然后让kk指向了这个新的对象呢?[/quote] 测试了下,目测是指向不同对象的~k++之后的k值和get(r)不同~
逍遥jc 2013-12-02
  • 打赏
  • 举报
回复
引用 7 楼 ChunAmy 的回复:
[quote=引用 1 楼 fangmingshijie 的回复:] hm.get(r)++这个意思是: hm.get(r)=hm.get(r)+1; 你认为上面成立吗?
哦~~~了然了,确实有问题,感谢~~ 还想顺便问一下,对于外覆类Integer,书上说只能给它赋初值,之后不能修改。那么这里kk ++是怎么实现的呢?会不会是重新new了一个Integer,然后让kk指向了这个新的对象呢?[/quote] Interger类型的变量,++自然能编译通过吧~话说你这个程序运行会报错的~
就是大力水手 2013-12-02
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
hm.get(r)++这个意思是: hm.get(r)=hm.get(r)+1; 你认为上面成立吗?
哦~~~了然了,确实有问题,感谢~~ 还想顺便问一下,对于外覆类Integer,书上说只能给它赋初值,之后不能修改。那么这里kk ++是怎么实现的呢?会不会是重新new了一个Integer,然后让kk指向了这个新的对象呢?
ganshenml 2013-12-02
  • 打赏
  • 举报
回复
引用 5 楼 u011935764 的回复:
[quote=引用 4 楼 ganshenml 的回复:] 一个为声明的变量可以直接进行++操作? hm.get(r)只是一个值,连声明都没有,如何编译通过?
这个我也看了半天,你这比较靠谱啊,学习了[/quote]我蒙的!
时光清浅 2013-12-02
  • 打赏
  • 举报
回复
引用 4 楼 ganshenml 的回复:
一个为声明的变量可以直接进行++操作? hm.get(r)只是一个值,连声明都没有,如何编译通过?
这个我也看了半天,你这比较靠谱啊,学习了
ganshenml 2013-12-02
  • 打赏
  • 举报
回复
一个为声明的变量可以直接进行++操作? hm.get(r)只是一个值,连声明都没有,如何编译通过?
帝瓜 2013-12-02
  • 打赏
  • 举报
回复
引用 2 楼 u013020378 的回复:
[quote=引用 1 楼 fangmingshijie 的回复:] hm.get(r)++这个意思是: hm.get(r)=hm.get(r)+1; 你认为上面成立吗?
hm.get(r)=hm.get(r)+1;跟这个有什么关系?[/quote]i++相当于i=i+1
wasphere 2013-12-02
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
hm.get(r)++这个意思是: hm.get(r)=hm.get(r)+1; 你认为上面成立吗?
hm.get(r)=hm.get(r)+1;跟这个有什么关系?
  • 打赏
  • 举报
回复
hm.get(r)++这个意思是: hm.get(r)=hm.get(r)+1; 你认为上面成立吗?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧