![](/img/trans.png)
[英]What is difference between int.class and Integer.TYPE in java?
[英]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 中的每个原始类型都有一个等效的包装类:
byte
有Byte
short
Short
int
有Integer
long
有Long
boolean
有Boolean
char
有Character
float
有Float
double
有Double
包装类继承自 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-boxing
和unboxing
从java 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 使用原始类型(也称为简单类型),例如int或double来保存语言支持的基本数据类型。 为了性能,原始类型而不是对象用于这些数量。 即使是最简单的计算,将对象用于这些值也会增加不可接受的开销。 因此,原始类型不是对象层次结构的一部分,并且它们不继承 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
之后,您可以像这样初始化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中是可能的。 但int
是 Java 中的原始类型(假设为关键字)。 所以,你不能用int
调用parseInt()
。
int
是表示整数的原始类型。 而Integer
是一个包装int
的对象。 Integer
对象为您提供了更多功能,例如转换为十六进制、字符串等。
您还可以将 OOP 概念与Integer
。 例如,您可以将 Integer 用于泛型(即Collection
)。<Integer>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.