【发布时间】:2011-03-16 14:07:16
【问题描述】:
这实际上与我之前提出的一个问题有关,但我一直在纠结这个细节。我仅限于 Java 1.4,我想将 int 类型转换为 Object。我真的需要使用Integer 类对象还是有办法直接转换它(1.4 中没有自动装箱)。这种“手动装箱”的成本是否值得将整个类从第 3 层导入到第 1 层,从而增加耦合?
【问题讨论】:
标签: java performance coupling
这实际上与我之前提出的一个问题有关,但我一直在纠结这个细节。我仅限于 Java 1.4,我想将 int 类型转换为 Object。我真的需要使用Integer 类对象还是有办法直接转换它(1.4 中没有自动装箱)。这种“手动装箱”的成本是否值得将整个类从第 3 层导入到第 1 层,从而增加耦合?
【问题讨论】:
标签: java performance coupling
在 Java 1.4 中没有简单的方法将原语转换为其基于对象的双胞胎,但有一种慢速和快速的方法。 new Integer(int) 很慢,Integer.valueOf(int) 很快。对于所有其他数字类型也是如此。
在 Java 5 中,您不需要那么多代码,但在内部,当您使用自动装箱时,编译器会为您插入对 valueOf() 的调用。
【讨论】:
new Integer(int) 也不应该那么慢 - 只有最终的变量内存屏障可能会打击你,如果使用多个线程。
new Integer(int) 很慢...只是内存效率较低,因为它不能使用 -128 到 127 缓存。
valueOf最多比new 稍慢,因为它有方法调用开销,一个或两个布尔检查和然后一个new。我完全不反对最好使用valueOf...我只是不认为你给出的使用它的理由是完全准确的。
在您的 Java 1.4 环境中,您不能将 int 强制转换为 Object,因为它不是 Object。
Java 区分原始类型和引用类型。 int 是原始类型。 boolean、byte、char、short、long、float 和 double 也是如此。
引用类型的值是对某个对象的引用。 “对象”是所有对象的根类。
在 Java 1.5 及之后的版本中,自动装箱将导致第二个变量指向与原始变量 i 具有相同值的 Integer 对象。
int i = 99;
Object o = (Object) i;
【讨论】: