Java中的整数和int有啥区别?

Posted

技术标签:

【中文标题】Java中的整数和int有啥区别?【英文标题】:What is the difference between Integer and int in Java?Java中的整数和int有什么区别? 【发布时间】:2012-01-29 10:45:32 【问题描述】:

例如为什么你可以这样做:

int n = 9;

但不是:

Integer n = 9;

你可以这样做:

Integer.parseInt("1");

但不是:

int.parseInt("1");

【问题讨论】:

整数是类,int是原始类型 由于自动装箱,您可以执行 Integer n = 9;(除非您使用的是非常旧的 java 版本) 在松散的方式中,它就像从城市喷泉(int)中获取纯净水与从附近商店获取包装精美(整数)的相同水。打包的有一些好处以及成本开销。 【参考方案1】:

int 是原始类型。 int 类型的变量存储您要表示的整数的实际二进制值。 int.parseInt("1") 没有意义,因为int 不是一个类,因此没有任何方法。

Integer 是一个类,与 Java 语言中的任何其他类没有什么不同。 Integer 类型的变量将 references 存储到 Integer 对象,就像任何其他引用(对象)类型一样。 Integer.parseInt("1") 是对 Integer 类的静态方法 parseInt 的调用(请注意,此方法实际上返回 int 而不是 Integer)。

更具体地说,Integer 是一个具有 int 类型的单个字段的类。此类用于您需要将 int 与任何其他对象一样对待的情况,例如在泛型类型或需要可空性的情况下。

请注意,Java 中的每个原始类型都有一个等效的 wrapper 类:

byteByte shortShort intInteger longLong booleanBoolean charCharacter floatFloat doubleDouble

包装类继承自 Object 类,而原始类不继承。所以它可以用在带有对象引用或泛型的集合中。

从 java 5 开始,我们有了自动装箱,原始类和包装类之间的转换是自动完成的。但是要小心,因为这可能会引入细微的错误和性能问题;明确说明转化永远不会受到伤害。

【讨论】:

很好的例子可能是:编译错误:List 有效:List 补充知识总是有益的 我喜欢学习新事物,尤其是与当前主题相关的知识。谢谢瓦希德。 我更喜欢明确的声明,因为保持这种做法本身就是一个错误杀手 @Mohammad_Hosein 性能和兼容性【参考方案2】:

Integer 几乎只是原始类型 int 的包装器。它允许您使用 Integer 类的所有功能,让您的生活更轻松。

如果您是 Java 新手,那么您应该学会欣赏 Java 文档。例如,您想了解的有关 Integer Class 的任何信息都已详细记录。

这直接来自 Integer 类的文档:

Integer 类将原始类型 int 的值包装在一个对象中。 Integer 类型的对象包含一个类型为 int 的字段。

【讨论】:

这有点没抓住重点。例如,Integer 是一个类,它可以存储在容器中(与原始类型不同)。【参考方案3】:

一个 int 变量保存一个 32 位有符号整数值。 Integer(大写 I)包含对(类)类型 Integer 或 null 的对象的引用。

Java 自动在两者之间进行转换;每当 Integer 对象作为 int 运算符的参数出现或分配给 int 变量或将 int 值分配给 Integer 变量时,从 Integer 到 int。这种铸造称为装箱/拆箱。

如果引用 null 的 Integer 变量被显式或隐式拆箱,则会引发 NullPointerException。

(在上面的文字中,术语“变量”是指局部变量、字段或参数)

【讨论】:

【参考方案4】:

Integer 指 Java 中的包装器类型,而 int 是原始类型。 Java 中除了原始数据类型之外的所有内容都被实现为对象,这意味着 Java 是一种高度合格的纯面向对象编程语言。如果需要,所有原始类型也可用作 Java 中的包装类型。您可以使用原始类型获得一些性能优势,因此仅在必要时才应使用包装器类型。

在您的示例中如下所示。

Integer n = 9;

常量9 是auto-boxed(auto-boxingunboxingjava 5 开始自动出现)到Integer,因此您可以使用这样的语句以及Integer n = new Integer(9)。这其实是通过Integer.valueOf(9).intValue();这个语句实现的

【讨论】:

【参考方案5】:

Integer 是一个包装类/对象,而 int 是原始类型。当您想将 int 值存储在集合中时,这种差异起着巨大的作用,因为它们只接受对象作为值(直到 jdk1.4)。从 JDK5 开始,由于自动装箱,情况就完全不同了。

【讨论】:

JDK5+ 也只接受对象;只是自动装箱让编译器自动为您调用Integer.valueOf(i)Integer.intValue()Collection<int> 仍然无法正常工作。所以这不是一个完全不同的故事——它是同一个故事,只是有点速记。 同意。抱歉,我的措辞可能没有反映出来。【参考方案6】:

这取自Java: The Complete Reference, Ninth Edition

Java 使用原始类型(也称为简单类型), 例如 intdouble,用于保存支持的基本数据类型 语言。 原始类型,而不是对象,用于这些 为了性能。为这些值使用对象 即使是最简单的 计算。因此,原始类型不是对象的一部分 层次结构,并且它们不继承Object

尽管表现出色 原始类型提供的好处,有时你会 需要一个对象表示。例如,您不能传递原语 通过引用方法键入。此外,许多标准数据 Java 实现的结构对对象进行操作,这意味着 您不能使用这些(特定于对象的)数据结构来存储原始类型。到 处理这些(和其他)情况,Java 提供类型包装器, 它们是在对象中封装原始类型的类。

包装类与 Java 的自动装箱直接相关 特征。类型包装器是 Double、Float、Long、Integer、Short、 字节、字符和布尔值。这些课程提供了广泛的 允许您将原始类型完全集成到 Java 的对象层次结构。

【讨论】:

【参考方案7】:

int 是原始类型而不是对象。这意味着没有与之关联的方法。 Integer 是带有方法的对象(例如 parseInt)。

使用较新的 java 有自动装箱(和拆箱)的功能。这意味着编译器将在需要的地方插入 Integer.valueOf(int) 或 integer.intValue()。这意味着实际上可以写

Integer n = 9;

解释为

Integer n = Integer.valueOf(9);

【讨论】:

【参考方案8】:

在 Java 中 int 是一种原始数据类型,而 Integer 是一个 Helper 类,用于将一种数据类型转换为另一种数据类型。

例如:

         double doubleValue = 156.5d;
         Double doubleObject  = new Double(doubleValue);
         Byte myByteValue = doubleObject.byteValue ();
         String myStringValue = doubleObject.toString();

原始数据类型在Helper类复杂的地方存储最快的可用内存并存储在堆内存中。

来自“David Gassner”Java Essential Training 的参考资料。

【讨论】:

【参考方案9】:

int 是表示整数的原始类型。而Integer 是一个包装int 的对象。 Integer 对象为您提供了更多功能,例如转换为十六进制、字符串等。

您还可以将 OOP 概念与 Integer 一起使用。例如,您可以将 Integer 用于泛型(即Collection<Integer>)。

【讨论】:

【参考方案10】:

int 是原始数据类型,而Integer 是 Java 中的引用或包装类型(类)。

java 1.5引入autoboxingunboxing的概念之后,您可以像这样初始化intInteger

int a= 9
Integer a = 9 // both valid After Java 1.5.

为什么是Integer.parseInt("1"); 而不是int.parseInt("1"); ??

Integerjdk库中定义的类,parseInt()是属于Integer类的静态方法

所以,Integer.parseInt("1"); 在 java 中是可能的。但int 是java 中的原始类型(假设为关键字)。所以,你不能用int 打电话给parseInt()

【讨论】:

这是一个简单且更新的答案【参考方案11】:

为了优化 Java 代码运行时,添加了 int primitive type(s),包括 floatbool 等,但它们也随之出现 wrapper classes,因此如果需要,您可以将它们转换为标准使用Java 对象以及作为其成员函数提供的许多实用程序(例如 Integer.parseInt("1"))。

【讨论】:

以上是关于Java中的整数和int有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的public int和int有啥区别?

C语言中int和float有啥区别啊

Int 和 Integer 有啥区别?

float和int有啥区别?

在C#中long与int64有啥区别吗

int和integer有啥区别