Java常用类—String
1.内部存储结构为字节数组。实体保存在方法区中的字符串常量池中。
2.字面量赋值与调用构造器赋值的区别?字面量赋值把字符串常量池中的实体内存地址赋给String对象。构
造器赋值是把字符串常量池中的实体内存地址赋给堆空间中String实例的字节数组的引用对象,再把堆空间中
创建的String实例的内存地址赋给String对象。
3.String对象更改值的操作:在字符串常量池中判断要更改的值是否已存在,若已存在就把该实体的地址值
赋给当前对象。若不存在就创建新的实体再赋值。
4.常量与常量的拼接结果在常量池中且常量池中不会存在相同的常量。只要拼接元素中存在变量,其结果就
在堆空间中。如果拼接结果调用intern()方法,那么其结果就强制在常量池中。
5.string为不可变字符串,类与字节数组都被final修饰。为什么 String s="a";s="b";可以执行成功?
虽然String被final修饰,但 String s="a" 不等同于final String s="a"。final修饰类仅代表该类不能
被继承,其对象的引用值可以改变。而后者语句代表s的引用地址不可变。(final修饰的引用变量,其引用的地址
值不可变,但引用所指向堆空间中的实体可变)
6.String、Stringbuffer、StringBuilder的异同?
相同:底层结构都是字节数组。
不同:String不可变字符串。StringBuffer为可变字符串,其中的方法都是同步方法,线程安全,效率低。
StringBuilder为可变字符串,线程不安全。执行效率:StringBuilder>StringBuffer>String。