《java谜题》(1)作者:JoshuaBloch&NealGafter

作者简介: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型字面变量使用小写
//本身就是种错误
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值