可能是它的愚蠢问题!!
假设
public class A{
Long weight = 1200L;
Integer i = 10;
int z = 20;
A a; }
public class B extends A{
public static void main(String[] args) {
B b = new B();
B c = new B();
B d = new B();
}
}
我想知道要创建多少个对象? 我所知道的,每个参考对应于b,c,d和Long,Integer,int的3个对象。此外,对应于b,c,d的每个对象具有实例变量" a"。
这是对的吗?如果是这样,这是否意味着如果我有一个包装类或任何预定义类的实例变量,我自己的对象wrt定义类(在我的整数和长整数)?
提前致谢
答案 0 :(得分:4)
您对正在创建的B
的计数是正确的。我认为问题的难点在于检查你是否理解
z
)weight
和i
)a
)答案是仅在第二种情况下创建对象。原始类型的字段不是对象,未初始化的字段是null
s。
请注意,weight
和i
是对象包装器中的基元。由于interning,-128和+127之间的数字是特殊的。
答案 1 :(得分:0)
Java维护256个Integer
个对象的内部缓存,每个值从-128到127一个。当此范围内的int
值被自动装箱时,来自此Integer
个对象使用缓存 - 也就是说,不会创建新的Integer
。
因此,此代码分配给变量b.i
,c.i
和d.i
的值都是对内部缓存中对象的引用 - 新的Integer
对象是根本不是由此代码创建的。
此代码运行时,会为变量Long
,b.weight
和c.weight
创建三个d.weight
个对象。为变量B
,b
和c
创建了三个d
类对象。但是这段代码本身不会创建除这六个之外的对象。
这个问题的答案是六。