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

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

int n = 9; 

但不是:

 Integer n = 9; 

你可以做:

 Integer.parseInt("1"); 

但不是:

 int.parseInt("1"); 

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

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

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

请注意,Java中的每个基本types都有一个等效的包装类:

  • byteByte
  • shortShort
  • intInteger
  • LongLong
  • boolean具有Boolean
  • charCharacter
  • floatFloat
  • doubleDouble

包装类inheritance自Object类,原始类不包含。 所以它可以用在带有Object引用或generics的集合中。

由于Java 5我们有自动装箱,原始和包装类之间的转换是自动完成的。 但是要小心,因为这可能会引入微妙的错误和性能问题。 明确的转换永远不会伤害。

整数是一个类,int是一个原始types。

在这些链接阅读:

  • 链接1
  • 链接2

整数几乎就是原始typesint的一个包装。 它可以让你使用Integer类的所有function来让你的生活变得更轻松。

如果您是Java的新手,那么您应该了解的是Java文档。 例如,关于整型类的任何事情都要详细logging。

这是Integer类的文档中的直接内容:

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

Integer是指Java中的包装types,而int是原始types。 Java中基本数据types以外的所有东西都是作为隐含Java的对象来实现的,它是一种高度合格的纯粹的面向对象的编程语言。 如果你需要,所有的原始types也可以作为Java中的包装types。 对于原始types,您可以获得一些性能优势,因此仅在需要时才使用包装types。

在你的例子如下。

 Integer n = 9; 

常量9被自动装盒 ( auto-boxing 装盒和自动从java 5开始发生)到Integer ,因此你可以使用这样的语句,也可以使用Integer n = new Integer(9) 。 这实际上是通过Integer.valueOf(9).intValue();

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

int是一个表示整数的基本types。 而Integer是一个包装int的对象。 Integer对象提供了更多的function,如转换为hex,string等。

您也可以使用Integer OOP概念。 例如,您可以使用整数generics(即Collection <Integer> )。

int是一个原始types,而不是一个对象。 这意味着没有与之相关的方法。 整数是具有方法的对象(如parseInt)。

随着更新的Java有自动装箱(和拆箱)的function。 这意味着编译器将在需要时插入Integer.valueOf(int)或integer.intValue()。 这意味着它实际上是可以写的

 Integer n = 9; 

这被解释为

 Integer n = Integer.valueOf(9); 

一个intvariables保存一个32位有符号整数值。 整数(大写I)持有对(类)types为Integer的对象的引用,或者为null。

Java自动在两者之间转换; 从Integer到int,只要Integer对象作为int运算符的参数出现,或者被赋值给intvariables,或者int值赋给Integervariables。 这个铸造被称为装箱/拆箱。

如果引用null的Integervariables被显式或隐式地解除了封装,则抛出NullPointerException。

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

为了优化Java代码运行时,已经添加了包括floatbool等在内的int 基本types ,但是它们与那里的wrapper类一起使用,所以如果需要,可以将它们转换并用作标准Java对象以及许多实用程序作为它们的成员函数(比如Integer.parseInt("1") )。

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

例如:

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

原始数据types存储最快的可用内存,其中Helper类非常复杂,并存储在堆内存中。

参考“David Gassner”Java基础培训。

int是原始数据types, Integer是Java中的引用或包装types(Class)。

在引入了自动装箱拆箱的概念的java 1.5之后,你可以像这样初始化int或者Integer

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

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

Integer是在jdk库中定义的一个类, parseInt()是一个属于Integer类的静态方法

所以, Integer.parseInt("1"); 在Java中是可能的。 但是在java中int是原始types(假设是一个关键字)。 所以,你不能用int来调用parseInt()

这是从Java:完整参考,第九版

Java使用基本types(也称为简单types)(如intdouble )来保存该语言支持的基本数据types。 原始types ,而不是对象, 为了performance而用于这些数量。 使用这些值的对象会增加一个不可接受的开销 ,即使是最简单的计算。 因此, 原始types不是对象层次结构的一部分它们不会inheritanceObject

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

包装类直接与Java的自动装箱function相关。 types包装是Double,Float,Long,Integer,Short,Byte,Character和Boolean 。 这些类提供了大量的方法,使您能够将原始types完全集成到Java的对象层次结构中。