《Java 解惑》学习笔记

本文探讨了Java编程中常见的误区与优化技巧,包括奇数判断的最优方式、浮点运算的精度问题、条件运算符的类型转换、字符串拼接的注意事项、正则表达式在字符串替换中的应用、finally语句块的正确使用、方法重写的动态分派特性、equals与hashCode的一致性原则、日期类的月份表示问题等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第2章

判断是否是奇数 i % 2 == 1; <- 错误的

当 i 是负数的时候,明显不能正确。 可以换成和0判断。 i % 2 == 0 ; 就可以避免。

更加优的性能: (i & 1) != 0;

Double 相减不一定出现想要的结果, 因此需要精密答案的地方要避免使用 float, double 。 而用 int , long , BigDecimal

例如 : new BigDecimal("2.00").subtract(new BigDecimal("1.10")) 结果为 0.90

2.00 - 1.10 结果为 0.8999999999999999

BigDecimal(String) 不可用 BigDecimal (Double ) 代替,否则 不精确。

char x = 'X';

int i = 0;

System.out.println(true ? x : 0);

System.out.println(false ? i : x); 输出结果为 X88 , 原因是 X 强制转换成为 int 型。

+= 类似的为符合赋值表达式, 自动地将说执行计算的结果转型为其左侧变量的类型。 不同与 a + b = c .

Object x = "buy";

String i = "Effective Java ! ";

x = x + i; √ (x + i 是 String型的, Sting 与 Object 兼容)

x += i; ×

注意 replace() 和 replaceAll() 的区别 : 链接

不能用return , break, continue 或者 throw 来退出 finally 语句块,并且千万不要允许让受检查的异常传播到finally 语句块之外。

通过覆写,可以获得动态的分派;而通过隐藏,你却得不到这种特性。(继承static 的函数,其实是隐藏-谜题48)

只要你覆写了equals方法,你就必须同时覆写hashcode

hashset类是使用equals(object)方法来测试元素是否等性,申明时注意是覆写而不是重载。

(@override 防止误写)

用String.split 代替String.Tokenizer ,因为前者可以用正则表达式,更加敏捷。

Date 将1月用0表示,而Calender 延续了这个错误,用Calendear.December 来表示明显而正确。

final 修饰符对方法和域而言,意味着完全不同的事情,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值