Java 如果包装器使用拆箱,那么intValue()方法需要什么?
例如,请看以下代码:Java 如果包装器使用拆箱,那么intValue()方法需要什么?,java,int,wrapper,unboxing,Java,Int,Wrapper,Unboxing,例如,请看以下代码: Integer myInt = new Integer(5); int i1 = myInt.intValue(); int i2 = myInt; System.out.println(i1); System.out.println(i2); 如您所见,我有两种方法可以将整数值从包装器复制到primive: 我可以使用拆箱 或 我可以使用intValue()方法 所以。。。当已经取消绑定时,有什么必要拥有一个方法呢?取消绑定是在Java5中引入的。包装器(包括这个方法
Integer myInt = new Integer(5);
int i1 = myInt.intValue();
int i2 = myInt;
System.out.println(i1);
System.out.println(i2);
如您所见,我有两种方法可以将整数值从包装器复制到primive:
我可以使用拆箱
或
我可以使用intValue()方法
所以。。。当已经取消绑定时,有什么必要拥有一个方法呢?取消绑定是在Java5中引入的。包装器(包括这个方法)从最初的版本就已经存在了 链接到 当时(1996年),我们确实需要
intValue()
方法,因为Oracle保证了向后兼容性。。。达到某个级别(在主要版本中并不总是100%)
该方法必须保留。除了Frank给出了一个很好的历史视角的答案之外,在某些情况下仍然需要使用
intValue()
请注意以下陷阱,它表明您不能将整数
视为整数
:
Integer i1 = new Integer(5);
Integer i2 = new Integer(5);
//This would be the way if they were int
System.out.println(i1 == i2); //Returns false
//This is the way for Integers
System.out.println(i1.intValue()==i2.intValue()); //Returns true
System.out.println(i1.equals(i2)); //Returns true
返回
false
true
true
因此,今天我认为使用JDK7比使用旧的intValue()更好。@user1883212像DeltaLima在他的回答中显示的那样,装箱/拆箱可以产生一些奇怪的结果,只要你知道你在做什么,可以随意使用这两个系统中的任何一个。谁知道这会引起多少困惑和挠头。当索引到容器中并尝试比较值时,通常会意外地遇到这种情况。例如
列表A
A.get(i)==A.get(i-1)
返回false
,即使两个位置都包含整数(5)
。。。