以下内容之间有什么区别:
<?php
header("Location:localhost/space/SPACE_V01.01.13/Source/Source_code/public/xxxx.php");
?>
和
Integer in = (Integer)y;
我想将Integer in = new Integer(y);
类型转换为int
类型,反之亦然。这是我的代码:
Integer
答案 0 :(得分:9)
简而言之,
Integer in = (Integer)y;
行使用不必要的演员。Integer in = new Integer(y);
行创建了Integer
个实例。详细的每个案例
首先,让我们考虑使用显式转换的情况。
Integer i = (Integer)10;
编译器理解10
是int
原始类型,并且它必须由Integer
包装以使其编译。似乎javac将做出以下结论:
Integer i = (Integer)Integer.valueOf(10);
但编译器非常聪明,可以进行不必要的转换,(Integer)
只是省略:
Integer i = Integer.valueOf(10);
接下来,有实例创建的情况。
Integer i = new Integer(10);
这一切都很简单。无论如何,将创建Integer
类的新实例。但是,正如文档所说,通常,这是不恰当的方式:
使用这些构造函数很少是合适的。静态工厂
valueOf()
通常是更好的选择,因为它可能会产生明显更好的空间和时间性能。
<强>结论强>
在日常代码编写中,我们通常使用autoboxing and unboxing。它们是原始类型与其对应的对象包装类之间的自动转换(已在Java 5中引入)。因此,您无需考虑Xxx.valueOf(xxx)
和.xxxValue()
方法。它很方便,不是吗?
Integer i = 10; // autoboxing
int j = i; // unboxing
答案 1 :(得分:9)
如果您只想将int
原语转换为Integer
对象,
你有四个选择
Integer in = (Integer)y; // 1 explicit cast
Integer in = y; // 2 implicit cast (autoboxing)
Integer in = new Integer(y); // 3 explicit constructor
Integer in = Integer.valueOf(y); // 4 static factory method
这里最优选的方式是2(自动装箱)。显式构造函数(3)不太可取,因为它可能会有一些小的性能损失。
此外,它们并不完全相同。考虑:
public static void main(String[] args) {
int x = 25;
Integer a = new Integer(x);
Integer b = new Integer(x);
System.out.println(a == b); // false
Integer c = Integer.valueOf(x);
Integer d = Integer.valueOf(x);
System.out.println(c == d); // true
Integer e = (Integer)x;
Integer f = (Integer)x;
System.out.println(e == f); // true
}
这是因为缓存了小整数(details here)。
答案 2 :(得分:4)
对于java中的每个primitive type,都有一个相应的包装类。您可以在这些原始类型和相应的包装类之间进行转换。这称为装箱和拆箱。当你写
Integer in = (Integer)y; //this is unnecessary casting
或
Integer in = new Integer(y); //create a new instance of Integer class
您主要是在原始类型和包装类之间进行转换。但是Java有一个名为Auto Boxing and Unboxing的功能,java将为你做这些演员。只需写下
int iPrimi = 20;
Integer iWrapper = iPrimi; //Autoboxing
int iPrimi2 = iWrapper; //Auto unboxing
Autoboxing和Unboxing会降低性能。 Primitives seems to be 2-3 times faster then it’s Integer
equivalent。因此,如果您不需要,请不要使用它们。