2012-07-15 65 views
27

他们之间有什么区别?Java中的.intValue()是什么?

l是一个Integer类型的数组列表。

版本1:

int[] a = new int[l.size()]; 
for (int i = 0; i < l.size(); i++) { 
    a[i] = l.get(i); 
} 
return a; 

版本2:

int[] a = new int[l.size()]; 
for (int i = 0; i < l.size(); i++) { 
    a[i] = l.get(i).intValue(); 
} 
return a; 

回答

41

l.get(i);将返回Integer,然后对它调用intValue();将返回整数作为int类型。

int转换为Integer称为拳击
转换一个Integerint称为拆箱
等了其他原语类型和它们的相应的包装的类之间的转换。

由于java 5,它会自动为你做(自动装箱)所需的转换,所以如果你正在使用Java 5或更高版本在你的例子中有没有什么区别。 如果Integer为空,并且您直接将其分配给int,则必须要关注的唯一一件事是,那么它将抛出NullPointerException。

在java 5之前,程序员自己必须做拳击/取消装箱。

+1

在Java 5之前,程序员也需要调用的intValue之前转换为整数。 – Thilo 2012-07-15 09:04:22

1

get(i)将返回Integer对象,当您拨打intValue()时将获得它的值。在第一种情况下,会自动发生auto-unboxing

5

l.get(ⅰ)返回的对象整数类的一个实例。

的intValue()整数类返回一个原语INT的实例方法。

请参阅Java参考文档... http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#intValue()

+0

plus:在版本1中,JVM应用自动装箱将'Integer'实例转换为原始类型 – hage 2012-07-15 08:17:03

+0

如果我没有在我的情况下调用.intValue(),那么潜在的危险是什么。 – Timeless 2012-07-15 08:18:18

+0

正如hage所说,Autoboxing应该为你做好必要的事情而不用担心。阅读这篇关于它的文章,http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html – 2012-07-15 08:21:20

0

这只是用于从Number对象中获取原始值的便捷方法:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Number.html

考虑代码:

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; 
+2

你不应该使用'new Integer(123);'Integer.valueOf(123)被推荐。 – 2012-07-15 08:26:22

+1

任何客观的原因或只是“他们这么说”? – agibalov 2012-07-15 08:27:14

+2

Java对整数使用高速缓存,使用新的整数总是创建新的对象。使用valueOf可以使用缓存中的值。这有好的和坏的方面,但通常不需要有两个对象代表第一。 – 2012-07-15 08:29:07

0

他们是完全一样的。正如其他海报所提到的,您可以将Integer对象或int基元放入数组中。在第一种情况下,编译器会自动将Integer对象转换为原语。这被称为自动装箱。

+0

所以,在这种情况下,java会通过调用.intValue()自动将Integer转换为int?从引用到值类型? – Timeless 2012-07-15 08:21:07

+0

是的,没错。 – Jorn 2012-07-15 08:23:05

8

正如你所注意到的,当你已经知道你有一个Integer时,intValue没什么用。但是,此方法未在Integer中声明,但在一般的Number类中声明。在所有你知道的情况下,你有一些Number,你会意识到这种方法的实用性。

3

Java支持两种类型的结构,第一种是基元,第二种是对象。

你问的方法是用来从Object中检索值到原始的。

所有表示数字的java类型扩展类Number。由于在Java 1.5中实现了[自动装箱],因此如果您使用相同的原始类型和对象类型,则不推荐使用此方法。

INT - 原始

整数 - 对象

的Java 1.5之前,我们是力写

int i = integer.intValue();

因为Java 1.5中,我们可以写

也可用于

这些方法时,我们需要将我们从整数类型更改为长

long l = integer.longValue();