java - 未实例化的整数将位于内存中的哪个位置?
问题描述
我有个问题; 我不知道它是否愚蠢......但无论如何我都会问。我们都知道,当我们说
String name = "someName";
我们知道这是一个池化字符串时,它不会进入堆,但是......
如果我们说
Integer integer = new Integer(888);
我们知道这将在堆上......那么
Integer otherInteger = 444;
“otherInteger”将在哪里得到?什么内存位置?谢谢!
解决方案
字符串名称 = "someName"; String 是不可变类,String 类型是引用或非原始类型,因此名称引用指向“someName”对象,该对象位于堆中的“String-constant-pool”中。(无堆栈)。 Integer 是包装类(提供将基元转换为对象和将对象转换为基元的机制)。 代码 Integer otherInteger = 444; 是自动装箱的一个示例(https://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html),编译器会自动将此行转换为 Integer otherInteger = Integer.valueOf(444) ; . 因此,Integer otherInteger= Integer.valueOf(444) 返回 Integer 对象,即 this 放置在堆中。
推荐阅读
- pandas - 如何选择 str.startswith 包含超过 1 个字符串值的行?
- c# - 将 Stacklayout BindableLayout.ItemTemplateSelector 绑定到 MVVM Xamarin 表单时出现 System.InvalidCastException
- laravel - 通过 Sanctum plainTextToken 检索用户
- java - 许多程序读取单个 XML Java
- azure-data-factory - Azure 数据工厂中的雪花复制组件无法默认列时间戳
- r - xtable::xtableList 修改乳胶对齐消息(多列)
- java - https 后的 Spring Boot:配置为侦听端口 8443 的 Tomcat 连接器无法启动
- flutter - '这个表达式的类型是'void',所以它的值不能被使用。' setState() 错误颤动
- powershell - 使用 CSV 文件和 Mac 地址重命名计算机
- javascript - 点击跨度打开下拉菜单