在类动物名称中,变量‘getObjectSize’返回0
class Animal {
String name;
public Animal() {
System.out.println(ObjectSizeCalculator.getObjectSize(this.name));
}
}在变量'dogName‘上的Dog getObjectSize类中,返回0
class Dog extends Animal{
String dogName;
public Dog() {
System.out.println(ObjectSizeCalculator.getObjectSize(this.dogName));
}
public void dogplay(){
System.out.println("dog playing");
}
}在这里,动物对象上的主getObjectSize返回16,而狗对象上的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对象的大小与动物对象的大小相等。
发布于 2021-01-18 21:43:53
问题是你使用了一个不正确的假设。的用法
System.out.println(ObjectSizeCalculator.getObjectSize(this.name));在您的构造函数中,它不获取引用this.name的大小,而是获取this.name引用的对象的大小。在您的代码中,this.name为null,返回的大小为0。
假设Animal实例有一个字段(name),而Dog实例有两个字段(name,继承自Animal和dogName),那么Dog的实例显然需要大于Animal的实例。
https://stackoverflow.com/questions/65775319
复制相似问题