Java中的Integer和int有什么区别?
例如,为什么你可以这样做:
int n = 9;
但不是:
Integer n = 9;
你可以做:
Integer.parseInt("1");
但不是:
int.parseInt("1");
int
是一个原始types。 int
types的variables存储要表示的整数的实际二进制值。 int.parseInt("1")
没有意义,因为int
不是一个类,因此没有任何方法。
Integer
是一个类,与Java语言中的任何其他类都没有区别。 Integer
types的variables存储对Integer
对象的引用 ,就像任何其他引用(对象)types一样。 Integer.parseInt("1")
是从Integer
类的静态方法parseInt
的调用(请注意,此方法实际上返回一个int
而不是Integer
)。
更具体地说, Integer
是一个types为int
的单个字段。 这个类用于需要将int
像其他任何对象一样对待的地方,比如在genericstypes或需要可空性的情况下。
请注意,Java中的每个基本types都有一个等效的包装类:
-
byte
有Byte
-
short
有Short
-
int
有Integer
-
Long
已Long
-
boolean
具有Boolean
-
char
有Character
-
float
有Float
-
double
有Double
包装类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代码运行时,已经添加了包括float
, bool
等在内的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)(如int或double )来保存该语言支持的基本数据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的对象层次结构中。