常用类:
String : 不可变长的字符序列
String类表示字符串 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。
StringBuilder : 可变长的字符序列, 字符串缓冲区支持可变字符串
StringBuffer : 可变长的字符序列;
底层: jdk8->字符数组 private final char[] value;
jdk11->字节数组 private final byte[] value;
String : 不可变的字符序列 private final byte[] value;
StringBuilder : 可变的字符序列,线程不安全|不同步
建议使用StringBuilder代替StringBuffer
StringBuffer : 可变的字符序列,线程安全的|同步
在多线程环境下保证数据的安全,建议使用StringBuffer
执行效率: StringBuilder > StringBuffer > String
StringBuilder|StringBuffer :
byte[] value; --> 默认初始容量16,每次扩容原容量的2倍+2,使用 Arrays.copyOf方法进行扩容
int newCapacity = (oldCapacity << 1) + 2;
基本数据类型的包装类
基本 引用
byte Byte
short Short
int Integer
long Long
char Character
boolean Boolean
double Double
float Float
自动拆装箱: jdk1.5
自动装箱 : 基本--->引用
自动拆箱 : 引用--->基本
问:
有了基本数据类型为什么还需要包装类?
1.包装类中提供了一些成员方法,更强大
2.类似容器中只能存储引用数据类型数据,需要包装类
3.基本数据类型与引用数据类型默认值不同
为什么有了引用数据类型还有基本数据类型?
有利于节省内存
使用更简单方便
总结 : int,Integer,new Integer数据比较问题:
要求数据值相等考虑类型,地址等问题
1)两个new 比较,肯定不相等,堆内存中地址不同
2)两个int 比较,值相等就相等
3)int与Integer比较,无论是否通过new,只要数据值相等就像等,因为会先自动拆箱成基本数据类型比较
4)一个Integer,一个new Integer肯定不相等,new 就是堆内存地址,地址肯定不同
5)两个Integer比较,看数值的范围是否在[-128,127]之间,在之间相等,不在之间返回new Integer不相等
枚举类型 : 一种事物的所有可能,一种类型的所有实例
1.enum定义枚举
2.枚举类中的字段都作为当前枚举类型的实例存在,默认public static final修饰
3.枚举类中可以根据需求定义成员,成员变量,成员方法,构造器...
4.枚举类型中的构造器默认私有的
5.所有的枚举类型默认隐式的继承自java.lang.Enum类型



