Java 1.4:将原始类型转换为Object(耦合与性能?)

mak*_*chi 5 java performance coupling

这实际上与我之前提到过的一个问题有关,但我还是留在这个细节上.我只限于Java 1.4,我想将int类型转换为Object.我真的需要使用一个Integer类对象,或者有一种直接投射它的方法(在1.4中没有自动装箱).这种"手动装箱"的成本是否值得将整个类从第3层导入第1层,从而增加耦合?

Aar*_*lla 9

在Java 1.4中没有简单的方法将原语转换为基于对象的双胞胎,但是有一种缓慢而快速的方式.new Integer(int)很慢,Integer.valueOf(int)很快.所有其他数字类型也是如此.

在Java 5中,您不需要太多代码,但在内部,编译器将valueOf()在您使用自动装箱时为您插入一个调用.

  • 我会说,*X很慢*而且Y很快*有点太过分类.在大多数情况下(即对于缓存范围之外的值)它们都是相同的(并且valueOf有一个调用开销的方法),如果没有,甚至`new Integer(int)`也不应该那么慢 - 只有最终的变量内存屏障如果使用多个线程,可能会打你. (3认同)
  • Java 1.4中不存在Integer.valueOf(int),只有valueOf(String),它似乎不保证缓存,因此新的Integer(int)是唯一的选择. (2认同)

And*_*mas 5

在 Java 1.4 环境中,您无法将 int 强制转换为对象,因为它不是对象。

Java 区分原始类型和引用类型。int 是一种原始类型。布尔型、字节型、字符型、短型、长型、浮点型和双精度型也是如此。

引用类型的值是对某个对象的引用。“Object”是所有对象的根类。

在 Java 1.5 及更高版本中,自动装箱将导致第二个变量指向与原始变量具有相同值的 Integer 对象i

    int i = 99;
    Object o = (Object) i;
Run Code Online (Sandbox Code Playgroud)