例如,你为什么这样做:
int n = 9;
但不是:
Integer n = 9;
你可以这样做:
Integer.parseInt("1");
但不是:
int.parseInt("1");
答案 0 :(得分:287)
int
是一种原始类型。类型int
的变量存储要表示的整数的实际二进制值。 int.parseInt("1")
没有意义,因为int
不是一个类,因此没有任何方法。
Integer
是一个类,与Java语言中的任何其他类都没有区别。类型Integer
的变量将引用存储到Integer
个对象,就像任何其他引用(对象)类型一样。 Integer.parseInt("1")
是对来自班级parseInt
的静态方法Integer
的调用(请注意,此方法实际上会返回int
而不是Integer
)。
更具体地说,Integer
是一个类型为int
的单个字段的类。这个类用于需要int
像任何其他对象一样对待的地方,例如在泛型类型或需要可空性的情况下。
请注意,Java中的每个基本类型都具有等效的包装器类:
byte
有Byte
short
有Short
int
有Integer
long
有Long
boolean
有Boolean
char
有Character
float
有Float
double
有Double
包装类继承自Object类,而原始类则不继承。因此,它可以在具有Object引用或Generics的集合中使用。
因为java 5我们有自动装箱,并且原语和包装类之间的转换是自动完成的。但请注意,因为这会引入细微的错误和性能问题;明确转换永远不会伤害。
答案 1 :(得分:31)
答案 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;
常量9
为auto-boxed(auto-boxing
且unboxing
从java 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),包括float
,bool
等,但它们同时出现wrapper classes,以便如果需要,您可以转换并将它们用作标准Java对象以及作为其成员函数的许多实用程序(例如Integer.parseInt("1")
)。
答案 11 :(得分:1)
int
是原始数据类型,而Integer
是Java中的引用或包装类型(类)。
在引入自动装箱和拆箱概念的java 1.5
之后,您可以像这样初始化int
或Integer
。< / p>
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中的原始类型(假设像关键字)。因此,您无法使用parseInt()
致电int
。