查看: 1745| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] List<Integer> 为何里面要放Wrapper Class呢?

🔗
匿名用户-MRUXJ  2020-11-1 11:40:22 |倒序浏览

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
为何不能放int呢?

在实际工程中一定有意义,比如序列化等


有大神可以解答一下吗?  

谢谢大佬

上一篇:刷题是否需要java转python
下一篇:11月刷题/Mock interview接龙活动(缺米刷题的来)
推荐
GodJune 2020-11-1 17:46:30 | 只看该作者
全局:
Q:我其实可以把楼主的问题问的更直接点:为什么java的泛型不支持基础数据类型?
A:首先泛型是java 1.5引进来的概念,目的是在编译时就为类型安全做了保证,好处其实是非常明显的,比如说List<Integer>中去放入一个Double编译器就会报错。
而且泛型类能与之前的代码兼容,是因为泛型信息只存在于编译期中,进入jvm就没了,这种也称为类型擦除。也就是说,在运行期,对于jvm来说,List<Integer>里面的元素他都看成Object,每次调用的时候进行类型转换而已。
很显然,Object属于对象类型,int之类的属于基础数据类型,而基础数据类型当然不支持所谓的类型转化了。
简而言之,两个原因,一,基础数据类型不属于对象,二,类型擦除

额外的Q:未来中,java的泛型可以支持基础数据类型吗?
A:我能想到的一个简单并且可能的做法就是做一个语法糖,也就是说把先把要传进来的int变成Integer。
但是这种做法本质上对于jvm没有任何意义,反正java程序成天处理对象类型,还不如直接用Integer。

评分

参与人数 4大米 +8 收起 理由
14417335 + 4
LucasDu + 1 给你点个赞!
milkncookie + 2 很有用的信息!
paperyfish + 1 赞一个

查看全部评分

回复

使用道具 举报

推荐
LPT 2020-11-1 12:01:09 | 只看该作者
全局:
你是问Java为什么这么设计还是...?

如果是问为什么不能这么干,因为,这是规定:
https://docs.oracle.com/javase/t ... ns.html#instantiate

:)

评分

参与人数 1大米 +1 收起 理由
LalalaX + 1 哈哈哈哈哈这个理由让我笑了半秒钟

查看全部评分

回复

使用道具 举报

推荐
a610062656 2020-11-1 15:52:32 | 只看该作者
全局:
我记得好像是为了generic吧,你initialize一个list List<Integer>, 这样list可以检测你放进来的element和integer什么关系,是他粑粑麻麻还是它儿子。primitive type没有class,不能说int是subclass of Number。但你可以说Integer是subclass of Number。

个人理解,有错请大家指正
回复

使用道具 举报

全局:
LPT 发表于 2020-10-31 21:01:09
你是问Java为什么这么设计还是...?

如果是问为什么不能这么干,因为,这是规定:
哈哈哈哈哈这个理由让我笑了半秒钟
回复

使用道具 举报

全局:
好像是&lt;&gt;里只能使用object类型,不能使用基础数据类型,因为基础数据类型不是new出来的,不是object.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表