什么是Java中的.intValue()?
它们之间有什么区别?
l
是Integer类型的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;
l.get(i);
将返回Integer
,然后调用intValue();
在它上面将返回整数类型为int
。
将int
转换为Integer
称为装箱 。
将Integer
转换为int
称为取消装箱
等等,用于其他原始类型与其相应的Wrapper类之间的转换。
从java 5开始,它将自动为您执行所需的转换(autoboxing),因此如果您使用的是Java 5或更高版本,则示例中没有任何区别 。 你需要关注的唯一事情是如果一个Integer
为null,你直接将它分配给int
然后它将抛出NullPointerException。
在java 5之前,程序员自己不得不做拳击/拆箱。
正如您所注意到的,当您已经知道有一个Integer
时, intValue
并没有多大用处。 但是,此方法未在Integer
声明,而是在常规Number
类中声明。 在你所知道的是你有一些Number
,你会意识到这种方法的效用。
l.get(i)返回的Object是Integer类的一个实例。
intValue()是Integer类的实例方法,它返回一个原语int 。
请参阅Java参考文档… http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#intValue()
Java支持两种类型的结构首先是基元,第二种是对象。
您要问的方法,用于从Object检索值到原语。
表示数字的所有java类型都扩展了类Number 。 如果使用相同的原语和对象类型,则这种方法在某种程度上已被弃用,因为[autoboxing]是在Java 1.5中实现的。
int – 原语
整数 – 对象
在Java 1.5之前,我们强制写入
int i = integer.intValue();
从Java 1.5开始我们就可以写了
int i = integer;
当我们需要将类型从Integer更改为long时,也会使用这些方法
long l = integer.longValue();
get(i)
将返回Integer
对象,并在调用intValue()
时获取其值。在第一种情况下,会自动auto-unboxing
。
它们完全一样。 正如其他海报所提到的,您可以将Integer
对象或int
原语放入数组中。 在第一种情况下,编译器会自动将Integer
对象转换为基元。 这称为自动拳击。
它只是从数字对象获取原始值的便捷方法: 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;