为了账号安全,请及时绑定邮箱和手机立即绑定

在Java和C#中,int和Integer有什么区别?

在Java和C#中,int和Integer有什么区别?

喵喵时光机 2019-07-11 15:39:42
在Java和C#中,int和Integer有什么区别?我在读更多关于软件的Joel当我遇到乔尔·斯波斯基表示某种特定类型的程序员,了解int和一个Integer在Java/C#(面向对象编程语言)中。那么,有什么区别呢?
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

在爪哇,‘int’类型是一个原语,而‘Integer’类型是一个对象。

在C#中,“int”类型与System.Int32而且是值类型(更像是java‘int’)。整数(与任何其他值类型一样)可以是盒装(“包装”)成一个对象。


对象和原语之间的区别在某种程度上超出了这个问题的范围,但总括而言:

对象提供多态工具,通过引用传递(或者更准确地说,具有按值传递的引用),并从..相反,原语是通过值传递的不可变类型,通常是从堆叠.


查看完整回答
反对 回复 2019-07-11
?
墨色风雨

TA贡献1853条经验 获得超6个赞

我将添加上面给出的优秀答案,并讨论装箱和取消装箱,以及这如何应用于Java(尽管C#也有)。我只使用Java术语,因为我金法用那个。

如前所述,int只是一个数字(称为开箱),而Integer是一个对象(它包含数字,因此盒装)。在Java术语中,这意味着(除了不能调用int),您不能存储int或集合中的其他非对象类型(ListMap等等)。为了存储它们,您必须先将它们装在相应的装箱类型中。

Java 5之前有一个叫做自动拳击自动拆箱允许在幕后进行装箱/取消装箱。比较和对比:Java 5版本:

Deque<Integer> queue;void add(int n) {
    queue.add(n);}int remove() {
    return queue.remove();}

Java1.4或更早版本(也没有泛型):

Deque queue;void add(int n) {
    queue.add(Integer.valueOf(n));}int remove() {
    return ((Integer) queue.remove()).intValue();}

必须指出,尽管Java 5版本很简洁,但这两个版本都生成相同的字节码。因此,虽然自动装箱和自动取消装箱非常方便,因为您编写的代码较少,但这些操作在幕后发生,具有相同的运行时成本,因此您仍然必须意识到它们的存在。

希望这能帮上忙!


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 1040 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信