在类动物getObjectSize中,变量“名称”返回0
class Animal {
String name;
public Animal() {
System.out.println(ObjectSizeCalculator.getObjectSize(this.name));
}
}
这里在类Dog getObjectSize上,变量“ dogName”返回0
class Dog extends Animal{
String dogName;
public Dog() {
System.out.println(ObjectSizeCalculator.getObjectSize(this.dogName));
}
public void dogplay(){
System.out.println("dog playing");
}
}
在类Main中,动物对象的getObjectSize返回16,而Dog对象的getObjectSize返回24,但是我认为它应该像动物对象一样返回16
public class Main {
public static void main(String[] args) {
Animal a = new Animal();
Dog dog = new Dog();
long objectSize = ObjectSizeCalculator.getObjectSize(a);
long objectSize1 = ObjectSizeCalculator.getObjectSize(dog);
System.out.println(objectSize+" "+objectSize1);
}
}
我想到的是内存中的dogName引用大小等于0,而Animal类中的名称引用大小也等于0,那么为什么在创建Dog的新对象后,它的大小大于动物对象的大小?
当我从dog类中删除(String dogName)时,Dog对象的大小现在等于动物对象的大小。
问题是您使用了错误的假设。指某东西的用途
System.out.println(ObjectSizeCalculator.getObjectSize(this.name));
构造函数中的值不会获取引用的大小this.name
,而是会获取引用的对象的大小this.name
。在您的代码中给出this.name
is null
,返回的大小为0
。
给定的实例Animal
具有1个字段(name
),而的实例Dog
具有两个字段(name
继承自Animal
和dogName
),则Dog
will的实例显然需要大于的实例Animal
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句