String类的声明(以jdk8.0为例)
说明:
1)final:String是不能被继承的。
2)Serializable:可序列化接口。凡是实现了此接口的类的对象就可以通过网络或者本地流进行数据的传输。
3)Comparable:实现了此接口的类的对像可以进行比较。
String类内部声明的属性:
在jdk8.0时有: private final char value[]
由于有final修饰,此value数组一旦初始化其地址值就不可以改变。
在jdk9.0之后:
char类型变成了byte类型,优化了内存空间。
字符串常量存放的位置:
1)字符串常量都存放在字符串常量池里面【Stringtable】
2)字符串常量池不允许存放两个相同的字符串变量。
3)字符串常量池在不同版本的jdk中存放的位置不同。 jdk7之前存放于方法区,jdk7之后字符串常量池存放于对空间中。
String的不可变性
1)当字符串常量重新赋值时需要重新指定一个字符串常量的位置进行赋值,不能在原有的位置修改。
2)当对现有字符串进行拼接操作时,需要重新开辟空间保留拼接后的字符串,不能在原有的位置修改。
3)当调用replace()替换原有字符串中的字符时,需要重新开辟一个空间保留替换之后的字符串,不能在原有的位置修改。