为什么在此代码示例中,即使引用未引用对象,引用为什么在内存中也有大小?

彼得·埃斯蒂法诺斯

在类动物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.nameis null,返回的大小为0

给定的实例Animal具有1个字段(name),而的实例Dog具有两个字段(name继承自AnimaldogName),则Dogwill的实例显然需要大于的实例Animal

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在此javascript示例中引用窗口对象?

来自分类Dev

为什么在此代码中可以引用“ r”变量?

来自分类Dev

数组中的Perl引用为什么引用会创建新的引用值

来自分类Dev

为什么@引用Coffeescript中的Window对象?

来自分类Dev

为什么在此示例中再次引用事件处理程序?

来自分类Dev

为什么在此示例中$ data引用不起作用?

来自分类Dev

为什么这段代码中没有对 ImageView 的引用?

来自分类Dev

为什么用空的lambda函数注册事件会在内存中引起强烈引用?

来自分类Dev

为什么Javascript对象引用未更新?

来自分类Dev

为什么在此代码中传递的引用不起作用?

来自分类Dev

为什么在此变量分配中引用了两个对象?

来自分类Dev

为什么引用占用内存?

来自分类Dev

为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问对象引用?

来自分类Dev

为什么在此类中复制构造函数,operator =和引用具有编译问题

来自分类Dev

为什么对象中的循环引用不使用无限内存?

来自分类Dev

为什么网上的所有asp.net mvc示例都引用UI中的DAL

来自分类Dev

为什么我在 setOnClickListener 中得到未解析的引用?

来自分类Dev

为什么无法从Xcode中的代码引用声音资产

来自分类Dev

为什么在代码优先的EntityFramework中存在重复的引用?

来自分类Dev

无法在C#代码中引用图像ID。为什么?

来自分类Dev

为什么即使未引用视图也不会破坏位图?

来自分类Dev

为什么DividerItemDecoration在recyclerView片段中获得空对象引用?

来自分类Dev

未引用的对象是否有可能保留在内存中并调用目标操作?

来自分类Dev

为什么即使引用不同,对象的值也会改变?

来自分类Java

为什么引用赋值原子在Java中?

来自分类Java

为什么引用类型存储在堆中

来自分类Dev

为什么在std :: variant中禁止引用?

来自分类Dev

为什么在PHP中通过引用传递?

来自分类Dev

为什么在 Angular 中丢失了对变量的引用?

Related 相关文章

  1. 1

    为什么在此javascript示例中引用窗口对象?

  2. 2

    为什么在此代码中可以引用“ r”变量?

  3. 3

    数组中的Perl引用为什么引用会创建新的引用值

  4. 4

    为什么@引用Coffeescript中的Window对象?

  5. 5

    为什么在此示例中再次引用事件处理程序?

  6. 6

    为什么在此示例中$ data引用不起作用?

  7. 7

    为什么这段代码中没有对 ImageView 的引用?

  8. 8

    为什么用空的lambda函数注册事件会在内存中引起强烈引用?

  9. 9

    为什么Javascript对象引用未更新?

  10. 10

    为什么在此代码中传递的引用不起作用?

  11. 11

    为什么在此变量分配中引用了两个对象?

  12. 12

    为什么引用占用内存?

  13. 13

    为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问对象引用?

  14. 14

    为什么在此类中复制构造函数,operator =和引用具有编译问题

  15. 15

    为什么对象中的循环引用不使用无限内存?

  16. 16

    为什么网上的所有asp.net mvc示例都引用UI中的DAL

  17. 17

    为什么我在 setOnClickListener 中得到未解析的引用?

  18. 18

    为什么无法从Xcode中的代码引用声音资产

  19. 19

    为什么在代码优先的EntityFramework中存在重复的引用?

  20. 20

    无法在C#代码中引用图像ID。为什么?

  21. 21

    为什么即使未引用视图也不会破坏位图?

  22. 22

    为什么DividerItemDecoration在recyclerView片段中获得空对象引用?

  23. 23

    未引用的对象是否有可能保留在内存中并调用目标操作?

  24. 24

    为什么即使引用不同,对象的值也会改变?

  25. 25

    为什么引用赋值原子在Java中?

  26. 26

    为什么引用类型存储在堆中

  27. 27

    为什么在std :: variant中禁止引用?

  28. 28

    为什么在PHP中通过引用传递?

  29. 29

    为什么在 Angular 中丢失了对变量的引用?

热门标签

归档