学习重点
1. String类的【不可变性_与final关键字有关】的理解&String类的类声明、内部属性的声明(可以Ctrl+12查阅API)
1)在Java中,如何输出对象的内存地址(或者:获取对象的内存地址的标识符-用于区别于不同的对象)
2.String实例化的两种方式:
1)字面量的方式
2)new构造器的方式
//第1种方式:字面量的方式-->字符串存储在字符串常量池中(Stringtable) String s1 = "hello"; //第2种方式:new构造器的方式-->存放在堆中 String s2 = new String("hello");
3.String字符串拼接操作的不同方式(三种):
1)常量+常量
结果仍然存储在字符串常量池中,返回此字面量的地址
2)常量+变量、变量+变量
通过new的方式创建一个新的字符串,返回堆空间中此字符串对象的地址
常量+变量:String s6 = "hello" + s2;
变量+变量:String s7 = s1 + s2;
3)调用字符串的intern()方法:
返回的是字符串常量池中字面量的地址
调用intern():String s8 = s5.intern();
4.String类的常用API方法--用到的时候再去API查阅使用就可以
5.字符串类型的三个类的对比讲解:String、StringBuffer、StringBuilder
1)三个类的对比
String类:不可变的字符序列
StringBuffer类:可变的字符序列,线程安全(因为用了synchronize关键字),但效率低
StringBuilder类:可变的字符序列,线程不安全(因为没用synchronize关键字),但效率高
2)StringBuffer、StringBuilder可变性分析_源码分析(API中的声明没用final关键字,所以可变)
3)源码启示
(1)如果开发中需要对文本数据(字符串)频繁的进行增、删、改等操作,建议使用StringBuffer或StringBuilder替换String. 因为使用String效率低。
(2) 如果开发中,不涉及到线程安全问题,StringBuffer&StringBuilder中建议使用StringBuilder替换StringBuffer。因为使用StringBuilder效率高
(3)如果开发中大体确定要操作的字符的个数,建议使用带int capacity参数的构造器。因为可以避免底层多次扩容操作,性能更高。