考虑简单的测试类:
import java.math.BigDecimal;
/**
* @author The Elite Gentleman
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal x = new BigDecimal("1");
BigDecimal y = new BigDecimal("1.00");
System.out.println(x.equals(y));
System.out.println(x.compareTo(y) == 0 ? "true": "false");
}
}
Run Code Online (Sandbox Code Playgroud)
你可以(有意识地)说它x
等于y
(不是对象引用),但是当你运行程序时,以下结果显示:
false
true
Run Code Online (Sandbox Code Playgroud)
问:什么是之间的区别compareTo()
,并equals()
在BigDecimal
该compareTo
可以确定x
等于y
?
PS:我看到BigDecimal在inflate()
方法上有一个equals()
方法.inflate()
实际上做了什么?
以下两段代码之间有什么区别 - 关于listener
放置?
<h:selectOneMenu ...>
<f:selectItems ... />
<f:ajax listener="#{bean.listener}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
和
<h:selectOneMenu ... valueChangeListener="#{bean.listener}">
<f:selectItems ... />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud) 这不是关于如何比较两个BigDecimal
对象的问题 - 我知道你可以使用compareTo
而不是equals
这样做,因为equals
记录为:
与compareTo不同,此方法仅考虑两个BigDecimal对象的值和比例相等(因此通过此方法比较时2.0不等于2.00).
问题是:为什么equals
以这种看似违反直觉的方式指定了?也就是说,为什么能够区分2.0和2.00 很重要?
似乎必须有这样的理由,因为Comparable
指定compareTo
方法的文档指出:
强烈建议(尽管不要求)自然排序与equals一致
我想必须有一个很好的理由忽略这个建议.