char
char 是 Java 的一个基本类型,是一个单一的 16 位 Unicode 字符,最小值 \u0000(即 0 ),最大值是 \uffff(即65535),char 数据类型可以存储任何字符,当然也包括一个中文字符。
String
字符串常量,Java 中 String 是不可变的,因此每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将引用指向新的 String 对像。String 设计成 final 的主要原因:
- 设计安全
确保它们不会在子类中改变语义,如果有一个 String 的引用,它引用的一定是 String 对象,而不可能是其他类的对象。 - 效率
设计成 final,JVM 才不用对相关方法在虚函数表中查询,而直接定位到 String 类的相关方法上,提高了执行效率。Java 设计者认为共享带来的效率更高。
同时,在 JDK 1.9 之后,把之前的内存 char[ ] 数组转换为 byte[ ] 数组,因为 char 使用 2 个字节来存储一个 char 字符,而 byte 是一个字节,只有当字符大小比如中文字符超过 0xff 时,则会把 byte 数组长度扩充为 2 倍。
StringBuffer
字符串变量(线程安全),如果频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,因为操作的都是同一个 StringBuffer 对象,而不是生成新的对象并改变对象引用,大量的类似操作就会比 String 效率更高。
StringBuilder
字符串变量(非线程安全),在单线程下效率比 StringBuffer 更高,其余与 StringBuidler 没差。
网友评论