如果我们在java中只声明一个变量而不进行初始化,那么内存中会发生什么?

2024-04-04

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

int x;

Employee emp;  

那么在这两种情况下,内存中究竟发生了什么?

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

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

Employee emp = new Employee();

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

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

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

The String类还分配堆内存,但使用了一些调整:字符串实习 http://en.wikipedia.org/wiki/String_interning一旦您分配了多个实例,就会使用String与相同的文字。因此,实际上内存中只有一个实例,但有多个引用它的变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我们在java中只声明一个变量而不进行初始化,那么内存中会发生什么? 的相关文章

随机推荐

  • Delphi:如何在本地创建和使用线程?

    我的数据库位于 VPS 中 我应该从我的表中获取一些查询 由于从服务器获取查询需要很长时间 取决于互联网速度 我想使用线程来获取查询 现在我创建一个线程并获取查询 然后通过发送和处理消息将结果发送到我的表单 我想知道是否可以在本地创建和使用
  • 多线程中的Tornado多个IOLoop

    我正在尝试在多个线程中运行多个 IOLoop 我想知道 IOLoop 实际上是如何工作的 class WebThread threading Thread def init self threading Thread init self n
  • 如何在 PHP 中获取两个日期之间的所有月份?

    我有 2 个约会 我想获得所有月份的总天数 我怎样才能在 PHP 中做到这一点 例如 date1 2013 11 13 yy mm dd format date2 2014 02 14 Output Months Total Days 11
  • C# 上的 DllImport

    如何在 C 中访问 C DLL 的函数 以下是 DLL 的原型 NOMANGLE int CCONV SSPSendCommand SSP COMMAND cmd SSP COMMAND INFO sspInfo NOMANGLE int
  • 使用 ~(波形符)导入 SCSS 文件在 Angular 6 中不起作用

    我有两个问题scssAngular6 中的文件导入 我需要将我的部分内容导入到我的所有内容中吗 component scss在全局中导入一次后的文件src sass styles scss 导入一次还不够吗 我如何导入SCSS使用导入快捷方
  • 浮点除以零而不是 constexpr

    编译时 constexpr double x 123 0 constexpr double y x 0 0 std cout lt lt x lt lt 0 lt lt y lt lt n 编译器 gcc 4 9 2 std c 11 或
  • 在 Dart 中进行系统调用?

    我想从 dart 内部执行 python 或 java 类 以下是我从 stackoverflow 问题 Java 中使用的片段 Runtime currentRuntime Runtime getRuntime Process execu
  • 计算相机近平面和远平面边界

    我正在尝试执行中提到的计算使用 THREE Frustum 计算近 远平面顶点 https stackoverflow com questions 12018710 calculate near far plane vertices usi
  • 用css根据屏幕尺寸制作圆形图像

    我正在尝试将我的图像制作为圆形 尽管该图像具有不同的宽度和高度 但我希望它是圆形 看起来它们具有相同的宽度和高度长度 例如 我的图像尺寸 250X300 但我希望它是200X200圆 实际上我可以轻松做到这一点 问题是根据屏幕尺寸执行此操作
  • 即使连接了硬件键盘也显示 iPhone 软键盘

    我的 iPad 应用程序使用充当硬件键盘的外部 设备 但是 在设置中的某个时刻 我需要输入文本 但无法使用 设备 设备 不是键盘 那么 即使我连接了硬件键盘 有没有办法强制弹出软键盘 是的 当用户拥有与设备配对的蓝牙扫描仪 键盘 时 我们已
  • 通过 MediatR PipelineBehavior 进行单元测试验证

    我正在使用 FluentValidation 和 MediatR PipelineBehavior 来验证 CQRS 请求 我应该如何在单元测试中测试这种行为 Use the 测试扩展 https docs fluentvalidation
  • Java中不使用队列的二叉树右视图

    HERE http www geeksforgeeks org print right view binary tree 2 是不使用队列的二叉树右视图的C 实现 当我尝试将其转换为 Java 时 它不起作用 这是我的Java代码 我认为很
  • 如何修复 cordova 构建错误:不支持的类文件主要版本 62 [重复]

    这个问题在这里已经有答案了 我运行时收到此错误cordova build android在我的Mac上 FAILURE Build failed with an exception Where Script Users ad8kunle M
  • “触发快照依赖项的更改”似乎无法正常工作

    我正在将 TeamCity 6 5 1 与一个项目和大约 10 个构建配置一起使用 我有一个类似于 Core gt Framework gt Apps 的依赖链 Framework 依赖于 Core App 也依赖于 Core 和 Fram
  • Python 中的主成分分析

    我想使用主成分分析 PCA 来降维 numpy 或 scipy 是否已经有了它 或者我必须使用自己的numpy linalg eigh http docs scipy org doc numpy reference generated nu
  • 将nicedit textarea内容保存到mysql数据库中

    我是个新手 所以我希望有一个非常清晰的解释 提前致谢 我在网站上使用 nicedit textarea 要读取的信息可能包含 只是纯文本 用户格式 文字和图像在一起 我正在使用 mysql 数据库 但我不知道如何以以下方式保存 textar
  • 如何确定 ::before 是否应用于元素?

    我有这个简单的 html 代码 我需要能够确定 before 是否应用于 icon player flash div i class icon player html5 i i class icon player none i i clas
  • R.string.value 帮助 android 通知

    怎么了 CharSequence contentTitle R string value 错误无法从 int 转换为 CharSequence 有办法解决这个问题还是我错过了什么 我试过 String s R string value Ch
  • 如何计算元素的高度?

    我正在通过 XML 数据生成 pdf 文件 我计算段落元素的高度为 float paraWidth 0 0f for Object o el getChunks paraWidth Chunk o getWidthPoint float p
  • 如果我们在java中只声明一个变量而不进行初始化,那么内存中会发生什么?

    如果我们只是创建一个引用变量或为原始数据类型或引用数据类型声明一个变量而不使用任何值进行初始化 如下所示 那么内存中会发生什么 int x Employee emp 那么在这两种情况下 内存中究竟发生了什么 在此阶段是否分配了任何内存 或者