阿里开发手册考点

所有的覆写方法,必须加@Override注解。

说明:getObject()与 get0bject()的问题。一个是字母的 O,一个是数字的 0,加@Override 可以准确判 断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。

所有整型包装类对象之间值的比较,全部使用equals方法比较。

说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。

【强制】浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals 来判断。

说明:浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数”的表示方式。二进 7/44

Java 开发手册 制无法精确表示大部分的十进制小数,具体原理参考《码出高效》。

反例:

float a = 1.0f - 0.9f; 
float b = 0.9f - 0.8f;
if (a == b) {
	// 预期进入此代码快,执行其它业务逻辑 
	// 但事实上 a==b 的结果为 false
}
Float x = Float.valueOf(a); 
Float y = Float.valueOf(b);
if (x.equals(y)) {
	// 预期进入此代码快,执行其它业务逻辑 
	// 但事实上 equals 的结果为 false
}

正例:

//(1) 指定一个误差范围,两个浮点数的差值在此范围之内,则认为是相等的。
float a = 1.0f - 0.9f; 
float b = 0.9f - 0.8f; 
float diff = 1e-6f;
if (Math.abs(a - b) < diff) { 
	System.out.println("true");
}

//(2) 使用 BigDecimal 来定义值,再进行浮点数的运算操作。
BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9"); 
BigDecimal c = new BigDecimal("0.8");

BigDecimal x = a.subtract(b); 
BigDecimal y = b.subtract(c);
if (x.equals(y)) { 
	System.out.println("true");
}
发布了40 篇原创文章 · 获赞 0 · 访问量 391

猜你喜欢

转载自blog.csdn.net/weixin_43780400/article/details/105598521