这可能会破坏讨论与回答规则,但我认为这是一种首选的做事方式。
-
假设您需要将原始数据类型转换为Object。我们以int --> Integer
为例。您可以通过强制转换或直接创建新对象来完成此操作。例如:
int a = 5; int b = 10;
Integer c = new Integer(a);
Integer d = (Integer) b;
哪种方式更好,a --> c
或b --> d
?我怀疑他们执行相同的操作,通常使用哪一个?
提前致谢。
答案 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;