gpt4 book ai didi

java - 如果我们在java中只声明一个变量而没有初始化,内存中会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:08 24 4
gpt4 key购买 nike

如果我们只是创建一个引用变量或为原始数据类型或引用数据类型声明一个变量而不用任何值初始化,如下所示,内存中会发生什么?

int x;

Employee emp;

那么在这两种情况下内存中到底发生了什么?

在此阶段是否分配了任何内存,或者它是否指向任何随机位置或指向空值或指向垃圾值?

与第二种情况一样,如果我们使用带有 new 运算符的构造函数或使用任何其他方式创建对象,则只会在内存中创建空间。

Employee emp = new Employee();

最佳答案

Java 虚拟机 (JVM) 从操作系统分配堆内存,然后为 Java 应用程序管理自己的堆。当应用程序创建一个新对象时(例如 Employee emp = new Employee()),JVM 会分配一个连续的堆内存区域来存储它。

当一个对象没有被初始化时(例如Employee emp = null),没有必要分配任何内存。然而,原始类型(在全局范围内)使用默认值初始化,即使您没有明确设置它(例如 int x 实际上是 int x = 0).所以在这种情况下,内存也会被分配。

只要对对象的引用保存在应用程序中的任何位置,该对象就会保留在内存中。不再引用的对象将由垃圾收集器 (GC) 处理并从堆中清除以回收它们的空间。

String 类也分配堆内存,但使用了一点调整:String interning一旦分配了具有相同文本的多个 String 实例,就会被使用。因此,实际上您在内存中只有一个实例,但有多个引用它的变量。

关于java - 如果我们在java中只声明一个变量而没有初始化,内存中会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com