Java Traps and Pitfalls
看完前三章,大量求值顺序和转型的坑,基本和C别无二致
下面两个关于char的坑是我觉得比较有可能栽进去的
能用String就别用char,char类型会默默地类型提升成int,拼接的时候也会出问题,杀人与无形,比如
new StringBuffer('a');
System.out.println('a' + 'b');
其他比如
对操作数求值顺序的依赖、数字类型提升和窄化都是老生长谈了。
另外一个语言API设计的坑就是String#replaceAll
这货第一个参数是一个正则式,你很可能把他当作一个普通字符串
后来你从坑里爬出来,知道了replaceAll的第一个参数可以写正则,于是你在一个for循环里使用了replaceAll,上线后机器负载莫名其妙的高,你才恍然大悟这货每次replace都要compile一次Pattern...
待续
下面两个关于char的坑是我觉得比较有可能栽进去的
能用String就别用char,char类型会默默地类型提升成int,拼接的时候也会出问题,杀人与无形,比如
new StringBuffer('a');
System.out.println('a' + 'b');
其他比如
对操作数求值顺序的依赖、数字类型提升和窄化都是老生长谈了。
另外一个语言API设计的坑就是String#replaceAll
这货第一个参数是一个正则式,你很可能把他当作一个普通字符串
后来你从坑里爬出来,知道了replaceAll的第一个参数可以写正则,于是你在一个for循环里使用了replaceAll,上线后机器负载莫名其妙的高,你才恍然大悟这货每次replace都要compile一次Pattern...
待续
有关键情节透露