Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果包装器使用拆箱,那么intValue()方法需要什么?_Java_Int_Wrapper_Unboxing - Fatal编程技术网

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