20201224-岳亮
学习日志
作业:
比较数组-方法重载:https://gitee.com/moon-in-erhai-lake/java-base/tree/master/array/src/com/erhaimoon/array/exercise
不可变类(immutable class)
- 被final修饰的类是最终类(final class),最终类不能有子类
- 被final修饰的变量是最终变量(final variable),其取值在初始化之后不可更改
String深度学习
String a="erhaimoon";
- 首先从String常量池中查找是否存在相应的String实例;
- 如果String常量池不存在相应的String实例,则构造新的实例并将该实例添加到String常量池并返回该实例的地址
- 将返回的String实例地址赋值给a变量,则a变量就指向了常量池
String b="erhaimoon";
- 继续从String常量池中查找是否存在相应的实例
- 如果String常量池存在相应的String实例,则直接返回String常量池中该实例的地址
- 将返回的String实例的地址赋值给b变量,则b变量就指向了String常量池
重要:运算符== 永远比较==两侧的值是否相等
解析String
- new String()对象时,涉及到String类中的三个相关的变量;
- byte[ ]value,byte coder,int hash,前两个变量都是由final修饰的,在new对象时一旦确定就是再不可变的;
- hash由private修饰,没有提供get/set方法,也是一旦确定就不可变的;
- coder决定字符序列使用哪种字符集编码。
所以String字符序列不可变,它们的值在创建后不能被更改。
intern()方法
intern( )方法返回String实例(字符串对象)的规范化表示形式
当调用intern方法时,如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自池的字符串,否则,此String对象将添加到池中,并返回对此String对象的引用
StringBuffer
- 线程安全,可变的字符序列;
- 字符序列缓冲区可以安全地被多个线程使用;
- 直接继承了 AbstractStringBuilder ( 从 JDK 1.5 开始 )
主要方法有append和insert方法,它们被重载以便接受任何类型的数据
StringBuffer和StringBuilder的比较
- StringBuffer和StringBuilder都没有重写Object和equals方法
- StringBuffer是线程安全的(使用synchronized关键字修饰),StringBuilder是线程不安全的,但是StringBuilder效率高
点赞
评论留言