二哥啊

导航

 

String是一个final类,代表不可变的字符序列。 

  当对字符串重新赋值时,需要重新指定内存区域,不能使用原有value进行赋值

  当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值

  当调用String的replace方法修改指定字符或字符串,也需要重新指定内存区域赋值

字符串是常量,它们的值在创建之后不能更改。

String对象的字符内容是存储在一个字符数组value[]中的

  String实现了Serializable接口:支持序列化

  实现了Comparable接口:可以比较大小

内部定义了final char[] value用于存储字符串数据

通过字面量的方式给一个字符串赋值,此时的字符串声明在字符串常量池中。

字符串常量池中是不会存储相同内容的字符串的。

 

String的实例化方式

1.通过字面量定义的方式

2.通过new+构造器的方式 字符串非常量对象存储在堆中

 

常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。

只要其中有一个是变量,结果就在堆中

如果拼接的结果调用intern()方法,返回值就在常量池中

 

 Heap堆

  一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用

类型的真实信息,方便执行器执行,堆内存分成三部分:

  新生区 养老区 永久存储区(方法区)

JVM规范将方法区描述为堆的一个逻辑部分,但它还有一个别名叫做Non-Heap ,目的就是要和堆分开。

posted on 2019-11-27 19:25  二哥啊  阅读(107)  评论(0编辑  收藏  举报