1700442602
1700442603
(1)使用String类的场景
1700442604
1700442605
在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算等。
1700442606
1700442607
(2)使用StringBuffer类的场景
1700442608
1700442609
在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装等。
1700442610
1700442611
(3)使用StringBuilder类的场景
1700442612
1700442613
在频繁进行字符串的运算(如拼接、替换、删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。
1700442614
1700442615
注意 在适当的场景选用字符串类型。
1700442616
1700442617
1700442618
1700442619
1700442621
编写高质量代码:改善Java程序的151个建议 建议55:注意字符串的位置
1700442622
1700442623
看这样一段程序:
1700442624
1700442625
public static void main(String[]args){
1700442626
1700442627
String str1=1+2+“apples”;
1700442628
1700442629
String str2=“apples:”+1+2;
1700442630
1700442631
}
1700442632
1700442633
想想看这两个字符串输出的苹果数量是否一致?如果一致,那是几个呢?
1700442634
1700442635
答案是不一致,str1的值是“3 apples”,str2的值是“apples:12”,这中间悬殊很大,只是把“apples”调换了一下位置,为何会发生如此大的变化呢?
1700442636
1700442637
这都源于Java对加号的处理机制:在使用加号进行计算的表达式中,只要遇到String字符串,则所有的数据都会转换为String类型进行拼接,如果是原始数据,则直接拼接,如果是对象,则调用toString方法的返回值然后拼接,如:
1700442638
1700442639
str=str+new ArrayList();
1700442640
1700442641
上面就是调用ArrayList对象的toString方法返回值进行拼接的。再回到前面的问题上,对于str1字符串,Java的执行顺序是从左到右,先执行1+2,也就是算数加法运算,结果等于3,然后再与字符串进行拼接,结果就是“3 apples”,其形式类似于如下计算:
1700442642
1700442643
String str1=(1+2)+“apples”;
1700442644
1700442645
而对于str2字符串,由于第一个参与运算的是String类型,加上1后的结果是“apples:1”,这仍然是一个字符串,然后再与2相加,其结果还是一个字符串,也就是“apples:12”。这说明如果第一个参数是String,则后续的所有计算都会转变成String类型,谁让字符串是老大呢!
1700442646
1700442647
注意 在“+”表达式中,String字符串具有最高优先级。
1700442648
1700442649
1700442650
1700442651
[
上一页 ]
[ :1.700442602e+09 ]
[
下一页 ]