Comparable接口,怪。。。

Keanu_Rocky 2004-06-22 10:22:22
JDK文档中,java.lang.Comparable中有:
Virtually all Java core classes that implement comparable have natural orderings that are consistent with equals. One exception is java.math.BigDecimal, whose natural ordering equates BigDecimal objects with equal values and different precisions (such as 4.0 and 4.00).

但是
import java.math.BigDecimal;
class Test {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal(4.0);
BigDecimal b2 = new BigDecimal(4.00);
if(b1.equals(b2)) System.out.println("equals");
if(b1.compareTo(b2)==0) System.out.println("equals");
}
}

结果都打印出equals,为什么?
...全文
144 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsdnRob 2004-07-02
  • 打赏
  • 举报
回复
frmChoose 你是设置为自动创建,但你删除了 对应的.H 和.CPP文件里相对应的全局变量 frmChoose。
梦想家起飞 2004-06-22
  • 打赏
  • 举报
回复
汗.. 细究起来还真不是个小问题. :-)
yesjoy 2004-06-22
  • 打赏
  • 举报
回复
java.math.BigDecimal
java.math.BigDecimal(double)
java.math.BigDecimal(java.lang.String)
java.math.BigDecimal(java.math.BigInteger)
java.math.BigDecimal(java.math.BigInteger, int)

new的时候最好先确定你要使用其中的哪个构造器噢
这样才不至于把其中的参数写错
估计不同的构造器可能会得出不同的结果噢
楼主不妨深入研究一下咯
梦想家起飞 2004-06-22
  • 打赏
  • 举报
回复
窃以为其实文档没有写错.

One exception is java.math.BigDecimal, whose natural ordering equates BigDecimal objects with equal values and different precisions (such as 4.0 and 4.00).

一个例外是 java.math.bigdecimal,它的自然顺序关系等同于有相同的值和不同的精度的bigdecimal对象.

(俺英文不好,翻译不准确,希望有高手把它翻译一下..)

文档的意思是(对象)4.0和(对象)4.00有同等的值和不同的精度,也就是说值还是同等的.
北极猩猩 2004-06-22
  • 打赏
  • 举报
回复
正如 wingtrace(暮寒.烟灰.风化物) 所说,4.0和4.00都被当作4来处理了,想要表达不同的精度必须通过字符串来处理
Keanu_Rocky 2004-06-22
  • 打赏
  • 举报
回复
知道了,谢啦。
改成:
import java.math.BigDecimal;
class Test {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal("4.0");
BigDecimal b2 = new BigDecimal("4.00");
if(b1.equals(b2)) System.out.println("equals");
if(b1.compareTo(b2)==0) System.out.println("equals");
}
}

就OK啦。
httruly 2004-06-22
  • 打赏
  • 举报
回复
确实文档与实际不符,,,,楼主还挺细心啊
wuyaxlz 2004-06-22
  • 打赏
  • 举报
回复
up
梦想家起飞 2004-06-22
  • 打赏
  • 举报
回复
那是因为4.0和4.00赋值个bigdecimal之后都被截成 4 了.
不信你println(b1.toString()+" "+b2.toString())看看
sammy791010 2004-06-22
  • 打赏
  • 举报
回复
是的,文档确实没错,不过楼主的钻研精神真是值得我们学习呀!
shine333 2004-06-22
  • 打赏
  • 举报
回复
文档没有错啊

class Test {
double x = 4.0; //or 4.00
}

两个class编译出来是一模一样的,可见4.0, 4.00, 在编译阶段就是变成同样的东西了
binny 2004-06-22
  • 打赏
  • 举报
回复
up
qlampskyface 2004-06-22
  • 打赏
  • 举报
回复
gz

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧