编写高质量代码:改善Java的151个建议六(字符串)52-59
该书籍PDF下载地址:http://download.csdn.net/download/muyeju/10001473
52.推荐使用String直接赋值
通过String直接创建字符串的过程:创建一个字符串时,首先检查字符串常量池中有没有与字面值相等的字符串,如果有,就不创建,直接返回字符串常量池中该对象的引用;如果没有,就创建,然后放到字符串常量池中,然后返回新建对象的引用。
通过new创建字符串的过程:它不会检查字符串常量池的
所以字符串推荐使用直接赋值
字符串的intern()方法:返回字符串对象的规范化表示形式。调用intern()方法时,首先会查找字符串常量池中是否有该字面值,有的会直接返回该引用,没有的话就创建一个放到字符串常量池中,然后返回引用。
53.字符串的replaceAll方法第一个参数是正则表达式
54.正确使用String,StringBuffer,StringBuilder
String是不可变量,创建后就不能修改,修改其实是创建了新的字符串对象
StringBUffer是可变字符序列,与String一样,在类型中保存的都是一个有序的字符序列(char类型的数组),不同的是StringBuffer的值是可以变的
StringBuffer的append和String的+号拼接的区别:
StringBuffer拼接后,它的引用不变,值变了
String通过+号拼接后:它指向了新的引用
StringBuilder和StringBuffer一样,都是可变字符序列,不同的是,StringBuffer是线程安全的,StringBuilder是线程不安全的,StringBuffer前面有synchronized修饰,所以StringBuffer的性能低于StringBuilder
使用场景:
55.注意字符串的位置:
Java对+号的处理机制:在使用+进行计算的表达式中,只要遇到String类型的字符串,所有数据都会转化为String类进行拼接,如果是原始类型就直接拼接,如果是对象,就调用对象的toString()方法的返回值后在拼接
在有+号的表达式中,String字符串具有最高优先级
56.自由选择字符串拼接方法
+ < concat < StringBuilder、StringBuffer的append
57.复杂字符串中使用正则表达式
58.统一使用utf-8编码
59.汉字排序
普通的汉字排序用Collator,复杂的自己写方法
public static void main(String[] args) { String[] s = {"手机费","捡垃圾","肯德基"} ; Comparator com = Collator.getInstance(Locale.CHINA) ; Arrays.sort(s,com); for (String string : s) { System.out.println("---"+string); } 结果:---捡垃圾 ---肯德基 ---手机费 }