作者简介:Bloch,google首席工程师EffectiveJava作者,Gafter,google工程师参与过c和c++
编译器的开发
//1.下面方法是确定其唯一的参数是否为奇数
public static boolean isOdd(int i) {
//return i % 2 == 1; error
return i % 2 != 0;
//or i & 1 != 0 效率更高
}
//2.它会打印什么
public static void zeroTimer() {
//2.0-1.1
System.out.println(2.0-1.1); //结果 0.8999999999999999
System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.1")));
//结果 0.9,不要用 new BigDecimal(double) 构建,new BigDecimal(.1)会返回一个BigDecimal
//需要精确答案的地方避免使用float,double,对于货币计算要用int,long,BigDecimal
}
//3.一天里的微秒除以一天的毫秒
public static void longDivision() {
final long MICROS_PER_DAY = 24*60*60*1000*1000;
final long MILLIS_PER_DAY = 24*60*60*1000;
System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);
//MICROS_PER_DAY计算溢出,打印结果为5
//计算先以int方式计算后结果才保存为long,在这之前计算已经溢出,
//java不具有目标确定类型的特性,指存储的变量类型不会影响计算所使用的类型
//修改,将乘积的第一个因子改为long型,在操作很大的数字时,防止发生缄默溢出
final long NEW_MICROS_PER_DAY = 24L*60*60*1000*1000;
final long NEW_MILLIS_PER_DAY = 24L*60*60*1000;
}
//4.初级问题
public static void elementary() {
System.out.println(12345+5432l);
//打印出了17777 ????
//因为5432 "1" 实际上是L的小写
//结论:表示长整型数据时L一定要大写,当初制定规范时允许long型字面变量使用小写
//本身就是种错误
}
分享到:
相关推荐
java源码编译器运行时这是我对 Joshua Bloch 的 Effective Java 2nd Edition 的总结。 我在学习时使用它并作为快速参考。 它不打算作为本书的独立替代品,因此如果您真的想学习此处介绍的概念,请购买并阅读本书并将...
5. **Atomic变量**:Java提供的原子类如AtomicInteger、AtomicLong等,提供了在多线程环境下的无锁编程方式,它们的更新操作是线程安全的,无需显式加锁。 书中通过详尽的注释,揭示了这些类背后的实现原理,包括...
java并发编程实践_中文_JoshuaBloch.; java并发编程实践_中文_JoshuaBloch.
2. **枚举**:Java中的枚举类型比传统的常量类更安全、更强大,Item 31 提到"用枚举代替常量类",强调了枚举在封装常量集方面的优势。 3. **方法覆盖和重载**:Item 26 "优先考虑使用泛型方法" 提示我们如何通过...
本书秉承了ScottMeyers的EffectiveC++和JoshuaBloch的EffectiveJava所开创的伟大传统.用真实的代码示例,通过清晰、贴近实际和简明的阐述,以条款格式为广大程序员提供凝聚了业界经验结晶的专家建议。 本书中,...