【问题标题】:Does Java allocate memory to object variables which are not given values? [duplicate]Java 是否将内存分配给没有给定值的对象变量? [复制]
【发布时间】:2021-10-27 23:49:49
【问题描述】:

我是 Java 初学者,所以我在 Google 上搜索时并不了解堆概念。在 OOP 教程中,我了解到当我们使用“new”关键字创建对象时,会为该对象分配内存。如果我不为类实例的属性提供值怎么办,那么实例变量也会占用内存但它们没有任何值。

class Employee{
    int age;
    String name;
}

public class Main {
    public static void main(String[] args) {
        Employee emp = new Employee();
        // I didn't provide any values to age and name
    }
}

【问题讨论】:

  • "... OOPs..." - 正确的缩写是 OOP。 --- Employee 中的两种类型性质不同。 int age 是一个原语,因此即使没有初始化,它也会保持值 0(所有原语都如此)。对于String name,为引用创建内存(因为所有对象都由引用寻址)。引用本身将引用null,因为我们没有显式为其赋值,表示当前没有存储引用。
  • 重要的是要意识到变量本身的空间和变量值的空间(对于引用类型)是两个不同的东西。

标签: java class object memory


【解决方案1】:

是的。一旦你使用'new'关键字创建了一个对象,相关的堆空间将被分配,因为每个变量都有默认值。

【讨论】:

    【解决方案2】:

    是的,它将存储给定数据类型的默认值。 所以在这里你要创建一个实例 Employee ,它会有他的名字和年龄。并且会做一些存储来将数据保存在其中。如果您没有为变量分配任何数据,它将自动设置为默认值。

    【讨论】:

      【解决方案3】:

      是的,这些获取默认值。 对于布尔值为 0 或 false 的所有原语(int float 等)。 对于像字符串这样的对象,它是空的。它与使用 null 为对象初始化时占用的空间相同。所以它有 4/8 字节(32/64 位),但还没有为字符串创建对象。

      【讨论】:

      • 你能稍微澄清一下你的最后一行吗?
      • null 消耗参考大小,所以可能是 64 位或 8 字节。但是没有分配对象
      猜你喜欢
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2014-05-22
      相关资源
      最近更新 更多