Java中Integer和int有什么区别?

时间:2011-12-28 20:05:12

标签: java class int

例如,你为什么这样做:

int n = 9;

但不是:

Integer n = 9;

你可以这样做:

Integer.parseInt("1");

但不是:

int.parseInt("1");

12 个答案:

答案 0 :(得分:287)

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

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

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

请注意,Java中的每个基本类型都具有等效的包装器类:

  • byteByte
  • shortShort
  • intInteger
  • longLong
  • booleanBoolean
  • charCharacter
  • floatFloat
  • doubleDouble

包装类继承自Object类,而原始类则不继承。因此,它可以在具有Object引用或Generics的集合中使用。

因为java 5我们有自动装箱,并且原语和包装类之间的转换是自动完成的。但请注意,因为这会引入细微的错误和性能问题;明确转换永远不会伤害。

答案 1 :(得分:31)

Integer是一个类,int是基本类型。

阅读以下链接:

答案 2 :(得分:7)

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

如果您是Java新手,那么您应该学会欣赏的是Java文档。例如,您需要了解有关Integer Class的任何内容。

这直接来自Integer类的文档:

Integer类在对象中包装基本类型int的值。 Integer类型的对象包含一个类型为int的字段。

答案 3 :(得分:6)

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

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

如果引用null的Integer变量被显式或隐式地取消装箱,则抛出NullPointerException。

(在上文中,术语"变量"表示局部变量,字段或参数)

答案 4 :(得分:5)

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

在您的示例中如下。

Integer n = 9;

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

实现的

答案 5 :(得分:3)

int是基本类型而不是对象。这意味着没有与之相关的方法。 Integer是一个带有方法的对象(例如parseInt)。

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

Integer n = 9;

被解释为

Integer n = Integer.valueOf(9);

答案 6 :(得分:3)

Integer是一个包装类/ Object,int是基本类型。当您想要将int值存储在集合中时,这种差异起着重要作用,因为它们只接受对象作为值(直到jdk1.4)。 JDK5因为自动装箱而起,这是完全不同的故事。

答案 7 :(得分:2)

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

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

答案 8 :(得分:2)

在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 :(得分:2)

这取自Java: The Complete Reference, Ninth Edition

  

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

     

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

     

包装类直接与Java的 autoboxing 相关   特征。类型包装器是 Double,Float,Long,Integer,Short,   字节,字符和布尔。这些课程提供了广泛的课程   允许您将基元类型完全集成到的方法   Java的对象层次结构。

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

在引入自动装箱拆箱概念的java 1.5之后,您可以像这样初始化intInteger。< / p>

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中的原始类型(假设像关键字)。因此,您无法使用parseInt()致电int