繁体   English   中英

Java中的Integer和int有什么区别?

[英]What is the difference between Integer and int in Java?

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

int n = 9;

但不是:

Integer n = 9;

你可以这样做:

Integer.parseInt("1");

但不是:

int.parseInt("1");

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

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

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

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

  • byteByte
  • short Short
  • intInteger
  • longLong
  • booleanBoolean
  • charCharacter
  • floatFloat
  • doubleDouble

包装类继承自 Object 类,而原始类则没有。 因此它可以用于具有对象引用或泛型的集合中。

从 java 5 开始,我们有了自动装箱,原始类和包装类之间的转换是自动完成的。 但是,请注意,因为这可能会引入细微的错误和性能问题; 明确转换从来没有坏处。

整数是一个类,整数是原始类型。

阅读以下链接:

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

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

这直接出自 Integer 类的文档:

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

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

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

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

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

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

在您的示例中,如下所示。

Integer n = 9;

常量9自动装箱auto-boxingunboxingjava 5开始自动发生)到Integer ,因此您可以使用这样的语句以及Integer n = new Integer(9) 这实际上是通过语句Integer.valueOf(9).intValue();

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

在 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。

摘自Java:完整参考,第九版

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

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

包装类与 Java 的自动装箱功能直接相关。 类型包装器是Double、Float、Long、Integer、Short、Byte、Character 和 Boolean 这些类提供了广泛的方法,允许您将基本类型完全集成到 Java 的对象层次结构中。

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

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

Integer n = 9;

这被解释为

Integer n = Integer.valueOf(9);

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

在引入自动装箱拆箱概念的java 1.5之后,您可以像这样初始化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()

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

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

为了优化 Java 代码运行时,添加了int 基本类型,包括floatbool等,但它们与包装类一起出现,因此如果需要,您可以将它们转换并用作标准 Java 对象以及许多附带的实用程序作为它们的成员函数(例如Integer.parseInt("1") )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM