2016-03-08 63 views
0

这可能会打破讨论与答案的规则,但我认为有一个首选的做事方式。将原始数据类型转换为对象时,您应该转换还是创建一个新对象?

-

比方说,你需要一个基本数据类型转换为对象。我们以int --> Integer为例。你可以通过投射或直接制作一个新的物体来达到这个目的。例如:

int a = 5; int b = 10; 
Integer c = new Integer(a); 
Integer d = (Integer) b; 

哪个是更好的方式来做到这一点,a --> cb --> d?我怀疑他们执行相同的操作,所以通常使用哪一个?

在此先感谢。

+0

取决于它的使用方式。大多数情况下,我只要在需要'Integer'的地方使用'int'并让Java自动对其进行设置。 – gla3dr

+1

都不是。阅读关于Java中的自动装箱。 –

+4

你既不需要演员也不需要新人。 '整数foo = 3;' – pvg

回答

1

以上都不是。 使用Integer.valueOf,因为通过缓存频繁请求的值可以显着改善空间和时间性能。

Integer.valueOf

的文档返回表示指定 {@code INT}值的{@code整数}实例。如果需要新的实例不是 ,则通常应优先使用此方法,而不是构造函数{@link #Integer(int)},因为此方法可能为 以产生显着更好的空间和时间性能通过 缓存频繁请求的值。

但与autoboxing,编译器会自动为你做。

Integer i = 1; 

哪一项是

Integer i = Integer.valueOf(1); 
0

无上述的语法糖。在这种情况下,您可以依靠autoboxing来照顾演员。

这将使你的代码是:

int a = 5; 
int b = 10; 
Integer c = a; 
Integer d = b; 
1

比方说,你需要一个基本数据类型转换为对象。 我们以int - > Integer为例。你可以通过铸造或直接制作一个新的物体来达到这个目的。例如:

int a = 5; int b = 10; 
Integer c = new Integer(a); 
Integer d = (Integer) b; 

哪个是更好的方式来做到这一点,一个 - > C或B - > d?我怀疑他们 执行相同的操作,所以通常使用哪一个?在版本5

Java编译,以后再执行自动装箱为原始值之间进行转换和它对应装箱对象。自动装箱模糊,但不抹去原始值和对象之间的区别。

下面的行气馁:

Integer c = new Integer(a); 

这是因为新的对象总是创建并防止被重复使用高速缓存的整数对象。

此行是由Java编译器转换:

Integer d = (Integer) b; 

相反,该行成为

Integer d = Integer.valueOf(b); 

这是,如果你完全省略从分配中投,你会得到的代码。使用valueOf()函数将原始值装箱到相应的对象中。这是将原始值分配给其对象的首选方式,因为这允许JVM重复使用经常缓存的对象。