字符串常量池在堆中还是方法区 在java中为什么String字符串可以作为对象来管理?
在java中为什么String字符串可以作为对象来管理?
据我们所知,Java中创建字符串(对象)的方法很多:[2]直接定义字符串常量
3]通过实例化字符串类来创建字符串对象
Java中的字符串可以直接作为对象操作。原则是什么?
例如:
1,literal quantity of string,string constant pool
Java中字符串的literal quantity是一对用双引号括起来的字符串,如“Chinese”。
字符串常量是常量池。当string STR=“string”时,编译器将检查在不朽生成中是否有对常量的引用。如果存在引用,编译器将直接将地址分配给堆栈。如果没有引用,编译器将首先在不朽生成中打开一个内存空间,然后将地址分配给堆栈指针。
也就是说,字符串对象的引用仍然存储在字符串常量池中。
2. 实例化string对象
该方法根据string对象重新创建一个string对象,在堆内存中添加新的内存块后,将指针赋给堆栈指针。
Java中的字符串常量池与Java中的堆和栈的区别?
Java常量池不在堆或堆栈中,它是独立的内存空间管理。
1. 堆栈:它存储基本类型变量数据和对象引用,但对象本身不存储在堆栈中,而是存储在堆(新对象)或常量池(字符串常量对象存储在常量池中)。堆:存储所有新对象。
3. 常量池:存储字符串常量和基本类型常量(publicstaticfinal)。
对于字符串:其对象的引用存储在堆栈中。如果它们是在编译时创建的(直接用双引号定义),则它们存储在常量池中。如果只能在运行时(New)确定它们,则将它们存储在堆中。对于相等的字符串,常量池中总是只有一个副本,堆中总是有多个副本。
字符串常量池在堆中还是方法区 java字符串常量池 元空间字符串常量池
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。