什么是Java中的.intValue()?

时间:2012-07-15 08:09:21

标签: java

他们之间有什么区别?

l是整数类型的arraylist。

版本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;

8 个答案:

答案 0 :(得分:46)

l.get(i);将返回Integer,然后在其上调用intValue();将返回类型为int的整数。

int转换为Integer称为拳击Integer转换为int称为取消装箱
等等,用于其他原始类型与其相应的Wrapper类之间的转换。

从java 5开始,它将自动为您执行所需的转换(自动装箱),因此如果您使用的是Java 5或更高版本,在您的示例中没有区别唯一需要照顾的是,如果Integer为空,并且您直接将其分配给int,那么它将抛出NullPointerException。

在java 5之前,程序员自己不得不做装箱/拆箱。

答案 1 :(得分:8)

正如您所注意到的,当您已经知道自己拥有intValue时,Integer没什么用处。但是,此方法未在Integer中声明,而是在一般Number类中声明。如果您知道自己拥有Number,那么您将意识到该方法的实用性。

答案 2 :(得分:5)

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

intValue() Integer 类的实例方法,它返回原语 int

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

答案 3 :(得分:3)

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

您要问的方法,用于从Object检索值到原语。

表示数字的所有java类型都扩展了类Number。如果使用相同的原语和对象类型,则这种方法在某种程度上已被弃用,因为[autoboxing]是在Java 1.5中实现的。

  

int - primitive

     

整数 - 对象

在Java 1.5之前,我们强制写入

int i = integer.intValue();

自Java 1.5以来我们可以编写

int i = integer;

当我们需要将类型从Integer更改为long

时,也会使用这些方法

long l = integer.longValue();

答案 4 :(得分:1)

get(i)将返回Integer个对象,并在您致电intValue()时获取其值。在第一种情况下,会自动auto-unboxing

答案 5 :(得分: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;

答案 6 :(得分:0)

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

答案 7 :(得分:0)

考虑以下示例:

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()