例如,你为什么这样做:
int n = 9;
Run Code Online (Sandbox Code Playgroud)
但不是:
Integer n = 9;
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
Integer.parseInt("1");
Run Code Online (Sandbox Code Playgroud)
但不是:
int.parseInt("1");
Run Code Online (Sandbox Code Playgroud)
Dar*_*ogg 305
int是一种原始类型.类型的变量int存储要表示的整数的实际二进制值.int.parseInt("1")没有任何意义,因为int是不是一类,因此没有任何方法.
Integer是一个类,与Java语言中的任何其他类都没有区别.类型的变量Integer存储引用到Integer对象,就像任何其它参考(对象)类型.Integer.parseInt("1")是parseInt从类调用静态方法Integer(请注意,此方法实际上返回的是一个int而不是一个Integer).
更具体地说,Integer是一个具有单个字段类型的类int.此类用于需要int像任何其他对象一样对待的地方,例如在泛型类型或需要可空性的情况下.
请注意,Java中的每个基本类型都有一个等效的包装类:
byte 具有 Byteshort 具有 Shortint 具有 Integerlong 具有 Longboolean 具有 Booleanchar 具有 Characterfloat 具有 Floatdouble 具有 Double包装类继承自Object类,而原始类则不继承.因此,它可以在具有Object引用或Generics的集合中使用.
从java 5开始,我们有自动装箱,并且原始和包装类之间的转换是自动完成的.但请注意,因为这会引入细微的错误和性能问题; 明确转换永远不会伤害.
小智 6
int变量保存32位有符号整数值.Integer(使用大写I)保存对(类)Integer类型的对象的引用,或者为null.
Java自动在两者之间进行转换; 每当Integer对象作为int运算符的参数出现或被赋值给int变量,或者int值被赋值给Integer变量时,从Integer到int.这种铸造称为装箱/拆箱.
如果引用null的Integer变量被显式或隐式地取消装箱,则抛出NullPointerException.
(在上文中,术语"变量"表示局部变量,字段或参数)
Integer是指Java中的包装类型,而是int基本类型.除Java中的原始数据类型之外的所有内容都实现为对象,这意味着Java是一种高度合格的纯面向对象编程语言.如果需要,所有基元类型也可用作Java中的包装类型.您可以使用基本类型获得一些性能优势,因此只有在必要时才应使用包装类型.
在您的示例中如下.
Integer n = 9;
Run Code Online (Sandbox Code Playgroud)
常量9是自动装箱的(auto-boxing并且unboxing从头java 5开始自动发生)Integer,因此你可以使用这样的语句Integer n = new Integer(9).这实际上是通过声明实现的Integer.valueOf(9).intValue();