20201224-岳亮

学习日志

作业:

可变长参数:https://gitee.com/moon-in-erhai-lake/java-base/tree/master/classes-object/src/com/erhaimoon/classes/exercise

比较数组-方法重载: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效率高

标签

评论

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1