Java中的.intValue()是什么?
他们之间有什么区别Java中的.intValue()是什么?,java,Java,他们之间有什么区别 l是整数类型的数组列表 第1版: int[] a = new int[l.size()]; for (int i = 0; i < l.size(); i++) { a[i] = l.get(i); } return a; int[]a=新的int[l.size()]; 对于(int i=0;i
l
是整数类型的数组列表
第1版:
int[] a = new int[l.size()];
for (int i = 0; i < l.size(); i++) {
a[i] = l.get(i);
}
return a;
int[]a=新的int[l.size()];
对于(int i=0;i
第2版:
int[] a = new int[l.size()];
for (int i = 0; i < l.size(); i++) {
a[i] = l.get(i).intValue();
}
return a;
int[]a=新的int[l.size()];
对于(int i=0;i
l.get(i)
将返回Integer
,然后调用intValue()其上的code>将返回类型为int
的整数
将int
转换为Integer
称为boxing
将整数
转换为整数
称为取消装箱
等等,以便在其他基本类型与其对应的包装器类之间进行转换
自java 5以来,它将自动为您执行所需的转换(自动装箱),因此,如果您使用java 5或更高版本,示例中没有任何差异您唯一需要注意的是如果整数
为空,您直接将其分配给int
,则它将抛出NullPointerException
在java 5之前,程序员自己必须进行装箱/拆箱。get(i)
将返回Integer
对象,并在调用intValue()
时获取其值。在第一种情况下,会自动执行自动拆箱。由l.get(i)返回的对象是整数类的一个实例
intValue()是返回原语int的Integer类的实例方法
请参阅Java参考文档。。。
这只是一种方便的方法,可以从Number的对象中获取原语值:
以代码为例:
Integer integerValue = Integer.valueOf(123);
float floatValue = integerValue.floatValue();
最后一行是一种方便的方法:
float floatValue = (float)(int)integerValue;
由于Java中的任何数值类型都可以显式转换为任何其他基元数值类型,Number
类实现所有这些转换。像往常一样,其中一些没有多大意义:
Integer integerValue = Integer.valueOf(123);
int intValue = integerValue.intValue();
int intValue2 = (int)integerValue;
int intValue3 = integerValue;
他们完全一样。正如其他海报所提到的,您可以将Integer
对象或int
原语放入数组中。在第一种情况下,编译器将自动将Integer
对象转换为原语。这称为自动装箱。正如您所注意到的,intValue
在您已经知道自己有一个整数时没有多大用处。但是,此方法不是在Integer
中声明的,而是在generalNumber
类中声明的。如果您只知道您有一些数字,您就会意识到该方法的实用性。Java支持两种类型的结构,第一种是原语,第二种是对象
您正在询问的方法用于从对象到基元检索值
表示数字扩展类的所有java类型。如果您使用与Java 1.5中实现的[autoboxing]相同的原语和对象类型,那么这些方法在某种程度上是不推荐的
整数原语
整数对象
在Java1.5之前,我们被迫编写
inti=integer.intValue()代码>
由于Java1.5,我们可以编写
inti=integer代码>
当我们需要将类型从Integer更改为long时,也会使用这些方法
long l=integer.longValue()代码>考虑以下示例:
Integer i = new Integer(10);
Integer j = new Integer(10);
if (!(i == j)) {
System.out.println("Surprise, doesn't match!");
}
if (i.intValue() == j.intValue()) {
System.out.println("Cool, matches now!");
}
哪张照片
Surprise, doesn't match!
Cool, matches now!
这证明了intValue()
具有很大的相关性。更重要的是,Java不允许将基本类型直接存储到容器中,而且我们经常需要比较存储在容器中的值。例如:
oneStack.peek() == anotherStack.peek()
没有按照我们通常期望的方式工作,而下面的语句则完成了这项工作,非常类似于一种变通方法:
oneStack.peek().intValue() == anotherStack.peek().intValue()
另外:在版本1中,JVM应用自动装箱将Integer
实例转换为基本类型如果我不调用.intValue(),那么潜在的危险是什么。正如hage所提到的,自动装箱应该可以让您不必担心。阅读这篇文章,@hage,自动装箱是由编译器而不是JVM完成的。那么,在这种情况下,java将通过调用.intValue()自动将整数转换为int?从引用到值类型?不应使用新整数(123)代码>整数。建议使用valueOf(123)。任何客观原因或只是“他们这么说”?Java使用整数缓存,使用新整数总是创建新对象。使用valueOf可以使用缓存中的值。这有好的一面,也有坏的一面,但通常不需要有两个表示数字1的对象。我不会使用Integer.valueOf(123)
,只要123
就可以了(事实上也是一样)。在Java 5之前,程序员在调用intValue之前也需要转换为整数。这个答案值得+1。我陷入了一个DSA问题,后来意识到我没有使用.intValue()。