Although the world is full of suffering, it is full also of the overcoming of it.
虽然世界充满了苦难,但总是能战胜的。
——Hellen Keller
通过直接量赋值创建一个字符串时,首先检查字符串池中是否有字面值相等的字符串,如果有,则不再创建,直接返回字符串池中该对象的引用,若没有则创建之,然后放到字符串池中,并返回新建对象的引用。
replaceAll传递的第一个参数是正则表达式。
在适当的场景选用字符串类型:
1、使用String类的场景
在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算等。
2、使用StringBuffer类的场景
在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在多线程的环境中,例如XML解析、HTTP参数解析和封装等。
3、使用StringBuilder类的场景
在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在单线程的环境中,例如SQL语句的拼装、JSON封装等。
在使用加号进行计算的表达式中,只要遇到String字符串,则所有的数据会转换为String类型进行拼接,如果是原始数据,则直接拼接,如果是对象,则调用toString方法的返回值然后拼接。
在“+”表达式中,String字符串具有最高优先级。
适当的场景使用适当的字符串拼接方式:
1、使用“+”拼接字符串,首先创建一个StringBuilder对象,调用append方法之后,再调用toString方法将其转换为字符串。
2、使用concat拼接字符串,都是通过数组拷贝完成的,但是最后return时,还是会通过创建一个String对象返回。
3、使用append拼接字符串,都在做字符数组处理,加长,然后数组拷贝,没有创建任何对象。
正则表达式是恶魔,威力巨大,但难以控制。
通过JDBC或者网络传输读取的字节数组是GBK的,而业务逻辑编码采用的是UTF-8,于是乱码产生了。一个系统使用统一编码。
Arrays工具类的默认排序是通过数组元素的compareTo方法来进行比较的。
如果排序不是一个关键算法,使用Collator类即可。