例如,为什么可以这样做:
int n = 9;
但不是:
Integer n = 9;
您可以执行以下操作:
Integer.parseInt("1");
但不是:
int.parseInt("1");
Integer n = 9;
自动装箱操作(除非您使用的是Java的旧版本)
例如,为什么可以这样做:
int n = 9;
但不是:
Integer n = 9;
您可以执行以下操作:
Integer.parseInt("1");
但不是:
int.parseInt("1");
Integer n = 9;
自动装箱操作(除非您使用的是Java的旧版本)
Answers:
int
是原始类型。类型的变量int
存储要表示的整数的实际二进制值。int.parseInt("1")
没有意义,因为int
它不是类,因此没有任何方法。
Integer
是一个类,与Java语言中的其他类没有什么不同。类型变量Integer
存储对对象的引用Integer
,就像存储任何其他引用(对象)类型一样。Integer.parseInt("1")
是对parseInt
类的静态方法的调用Integer
(请注意,该方法实际上返回an int
而不是an Integer
)。
更具体地说,Integer
是一个具有单个type字段的类int
。此类用于需要int
与其他任何对象一样对待的地方,例如在通用类型或需要可为空的情况下。
请注意,Java中的每个基本类型都有一个等效的包装器类:
byte
有 Byte
short
有 Short
int
有 Integer
long
有 Long
boolean
有 Boolean
char
有 Character
float
有 Float
double
有 Double
包装器类从Object类继承,而原始类则没有。因此,它可以用于带有对象引用或泛型的集合中。
从Java 5开始,我们具有自动装箱功能,并且原始类和包装类之间的转换是自动完成的。但是要当心,因为这可能会引起细微的错误和性能问题;明确表示转化永远不会受到伤害。
C#
所有数据类型中都有“别名”并且int.Parse()
确实有意义(即使确实没有)
C#
与这里完全无关。
整数几乎只是原始类型int的包装。它允许您使用Integer类的所有功能使您的生活更轻松。
如果您不熟悉Java,则应该学习Java文档。例如,任何您想了解的有关Integer类的信息都会详细记录。
这直接来自Integer类的文档:
Integer类将原始类型int的值包装在对象中。类型为Integer的对象包含一个类型为int的字段。
Integer
类一样,它可以存储在容器中(与原始类型不同)。
一个int变量保存一个32位带符号整数值。一个Integer(大写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
,因此您可以使用类似and的语句Integer n = new Integer(9)
。这实际上是通过声明实现的Integer.valueOf(9).intValue();
int是原始类型,而不是对象。这意味着没有与之关联的方法。整数是具有方法(例如parseInt)的对象。
使用较新的java,可以进行自动装箱(和拆箱)功能。这意味着编译器将在需要的地方插入Integer.valueOf(int)或integer.intValue()。这意味着实际上有可能写
Integer n = 9;
解释为
Integer n = Integer.valueOf(9);
整数是包装类/对象,整数是原始类型。当您要在集合中存储int值时,这种差异起着巨大的作用,因为它们仅接受对象作为值(直到jdk1.4为止)。从JDK5开始,由于自动装箱,情况就完全不同了。
Integer.valueOf(i)
或Integer.intValue()
为您服务。Collection<int>
仍然无法正常工作。因此,这不是一个完全不同的故事,而是同一个故事,只是有一些速记。
在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基础培训。
Java使用原始类型(也称为简单类型),例如int或double来保存语言支持的基本数据类型。为了性能起见,将原始类型而不是对象用于这些数量。对这些值使用对象会给最简单的计算增加不可接受的开销。因此,基本类型不是对象层次结构的一部分,并且它们不继承Object。
尽管原始类型提供了性能上的好处,但有时您仍需要对象表示。例如,您不能通过引用method来传递基本类型。而且,Java实现的许多标准数据结构都对对象进行操作,这意味着 您不能使用这些(对象特定的)数据结构来存储基本类型。为了处理这些(和其他)情况,Java提供了类型包装器,它们是将对象中的原始类型封装起来的类。
包装器类与Java的自动装箱 功能直接相关。类型包装器是Double,Float,Long,Integer,Short,Byte,Character和Boolean。这些类提供了各种各样的方法,使您可以将基本类型完全集成到Java的对象层次结构中。
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中是原始类型(假设像关键字一样)。所以,你不能打电话parseInt()
用int
。