问题描述
- java数据在内存中的存放问题
-
谢谢查看。
问题是这样的,作为java新手,最近老搞不明白数据在内存中到底存放位置的问题。查了许多资料后,得出个结论,请有错误的帮忙指正,谢谢。
基本类型的数值会存放在栈中,执行效率高;引用对象(不包括String类型)的数据放在堆中,堆灵活性高,容量可变长。
但是编译器在编译时候,基本类型中部分,称为直接量会为了效率高会直接生成放在常量区,其他都会在栈中生成,而且经过优化,如果是同一生命周期内栈数据是可以共享的,也就是有相同的数据的变量可以指向同个栈地址,方便节省空间。
String类型,如果是String s1 = "xxx"; 将把xxx先在方法区中的常量池生成,再让s1指向此地址;而String s2 = new String("abc"); 会在堆中生成一个String对象,而且查找常量池是否有abc,若没有就再建个,堆中对象指向常量池abc,变量s2指向堆中对象。总结就是常量池是专门用来处理字符串的。
以上,请指教。
解决方案
时间: 2025-01-30 06:17:35