45. 将局部变量的作用域最小化
- 要使局部变量作用域最小化的最有力的方法就只在第一次使用它的地方声明
- 另一个有效方法是使方法小而集中
46. for-each循环优于传统的for循环
有三种常见的情况无法使用for-each
- 过滤——如果需要遍历集合,并删除指定的元素,就需要使用显示的迭代器,以便可以调用它的remove方法
- 转换——如果需要遍历列表或数组,并取代它部分或全部的元素值,就需要列表迭代器或数组索引,以便设定元素的值
- 平行迭代——如果需要并行的遍历多个集合,就需要显示的控制迭代器或索引变量,以便所有迭代器或索引变量可以同步前移
47. 了解和使用类库
48. 如果需要精确的答案,不要使用float和double
使用bigdecimal、int、long进行货币运算
- BigDecimal:法定的舍入行为、性能不是太好
- int:自己需要记录十进制小数点,且数值范围没有超过9位十进制数字
- long:不超过18位十进制数字
- 如果超过18位数字,就必须使用BigDecimal
49. 基本类型优于装箱基本类型
50. 如果其他类型更合适,则尽量避免使用字符串
- 字符串不适合代替其他的值类型
- 字符串不适合代替枚举类型
- 字符串不适合代替聚焦类型
- 字符串也不适合代替能力表(capabilities)
51. 当心字符串连接的性能
- 多个字符串的拼接优先使用stringbuilder(java8中对string的拼接进行了优化,默认也是使用stringbuilder)
52. 通过接口引用对象
- 如果有合适的接口类型存在,那么对于参数、返回值、变量和域来说,就都应该使用接口类型进行声明
53. 接口优于反射机制
- 通常普通应用程序在运行时不应该以反射方式访问对象
- 如果你编写的程序必须要与编译时未知的类一起工作,如有可能,就应该仅仅使用反射机制来实例化对象,而访问对象时则使用编译时已知的某个接口或者超类