将原始数据类型转换为对象时,是应该转换还是创建新对象?

时间:2016-03-08 23:16:35

标签: java casting

这可能会破坏讨论与回答规则,但我认为这是一种首选的做事方式。

-

假设您需要将原始数据类型转换为Object。我们以int --> Integer为例。您可以通过强制转换或直接创建新对象来完成此操作。例如:

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

哪种方式更好,a --> cb --> d?我怀疑他们执行相同的操作,通常使用哪一个?

提前致谢。

3 个答案:

答案 0 :(得分:1)

以上都不是。 使用Integer.valueOf可以通过缓存经常请求的值来显着提高空间和时间性能。

来自Integer.valueOf

的文档
  

返回表示指定的{@code Integer}实例        {@code int}值。如果没有新的{@code Integer}实例        要求,这种方法通常应优先使用        构造函数{@link #Integer(int)},因为这种方法很可能        通过以获得更好的空间和时间性能        缓存经常请求的值。

但是使用autoboxing,编译器会自动为您完成。

Integer i = 1;

这是

的语法糖
Integer i = Integer.valueOf(1);

答案 1 :(得分:1)

  

假设您需要将原始数据类型转换为Object。   我们用int - >以整数为例。你可以通过施放或   直接制作一个新的对象。例如:

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

哪种方式更好,a - > c或b - > d?我怀疑他们   执行相同的操作,通常使用哪一个?

版本5及更高版本中的Java编译器执行 autoboxing 以在原始值和相应的盒装对象之间进行转换。 Autoboxing模糊,但不会擦除原始值和对象之间的区别。

不建议使用以下行:

Integer c = new Integer(a);

这是因为始终会创建一个新对象,并防止重用缓存的Integer对象。

这一行由Java编译器转换:

Integer d = (Integer) b;

相反,这一行变为

Integer d = Integer.valueOf(b);

如果您完全忽略了作业中的演员表,那么这是您将获得的代码。使用valueOf()函数将原始值装箱到其对应的对象中。这是将原始值分配给其对象的首选方法,因为这允许JVM重用经常缓存的对象。

答案 2 :(得分:0)

以上都不是。在这种情况下,您可以依靠autoboxing来处理演员阵容。

这会使你的代码成为现实:

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