谢谢查看。
问题是这样的,作为java新手,最近老搞不明白数据在内存中到底存放位置的问题。查了许多资料后,得出个结论,请有错误的帮忙指正,谢谢。
基本类型的数值会存放在栈中,执行效率高;引用对象(不包括String类型)的数据放在堆中,堆灵活性高,容量可变长。
但是编译器在编译时候,基本类型中部分,称为直接量会为了效率高会直接生成放在常量区,其他都会在栈中生成,而且经过优化,如果是同一生命周期内栈数据是可以共享的,也就是有相同的数据的变量可以指向同个栈地址,方便节省空间。
String类型,如果是String s1 = "xxx"; 将把xxx先在方法区中的常量池生成,再让s1指向此地址;而String s2 = new String("abc"); 会在堆中生成一个String对象,而且查找常量池是否有abc,若没有就再建个,堆中对象指向常量池abc,变量s2指向堆中对象。总结就是常量池是专门用来处理字符串的。
以上,请指教。
java数据在内存中的存放问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
0条回答 默认 最新
悬赏问题
- ¥15 Qt下使用tcp获取数据的详细操作
- ¥15 idea右下角设置编码是灰色的
- ¥15 全志H618ROM新增分区
- ¥20 jupyter保存图像功能的实现
- ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
- ¥15 NAO机器人的录音程序保存问题
- ¥15 C#读写EXCEL文件,不同编译
- ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
- ¥15 扩散模型sd.webui使用时报错“Nonetype”
- ¥15 stm32流水灯+呼吸灯+外部中断按键