假设我有一个班级:
class A {
private Integer i;
public int getI() {
return i;
}
// Setter, etc.
}
我写道:
A a = // initializer
Integer b = a.getI();
会有多少个整数?关于自动装箱/拆箱的天真读物让我相信答案是2,但如果getI()是:
public Integer getI();
然后答案是1。
答案 0 :(得分:3)
你是绝对正确的,但有一点需要注意:第一部分的答案取决于Integer i
的价值。
Integer
,在装箱来自int
getI()
时创建另一个Integer
Integer i
对象。注意:如果Integer
的值很小(更准确地说,介于-128和127之间),则自动装箱将生成相同的{{1}}到interning。
答案 1 :(得分:1)
正确.... ISH
理论上,编译器/ JIT / JVM /等可以优化自动装箱,但我不知道它是否真的会。
也可以重复使用相同的Integer对象。例如,Integer.valueOf(2)保证在每次调用它时为您提供相同的Integer对象并重新使用相同的对象。这仅保证在-128到+127范围内的值,但是,它可能发生在该范围之外但不应该依赖。