Tag: 等于

重载运算符==与Equals()

我正在开发一个C#项目,到目前为止,我已经使用了不可变的对象和工厂来确保types为Foo对象始终可以与==进行比较。 Foo对象一旦创build就无法更改,工厂总是为给​​定的参数集返回相同的对象。 这很好,而且在整个代码库中,我们假设==总是用于检查相等性。 现在我需要添加一些function,引入一个边缘情况,这不会总是工作。 最简单的做法是重载operator ==这个types,这样项目中的其他代码都不需要改变。 但是,这使我感到代码味道:重载operator ==而不是Equals看起来很奇怪,我习惯于==检查引用相等的约定,而Equals检查对象相等(或任何术语)。 这是一个合理的关注,或者我应该继续并重载运operator == ?

BigDecimal equals()与compareTo()

考虑简单的testing类: 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"); } } 你可以(有意识地)说x等于y (不是对象引用),但是当你运行这个程序时,下面的结果显示: false true 问题: […]

(.1f + .2f ==。3f)!=(.1f + .2f).Equals(.3f)为什么?

我的问题不是浮动精度。 这是为什么Equals()与==不同。 我明白为什么.1f + .2f == .3f是false (而.1m + .2m == .3m是true )。 我得到那==是参考和.Equals()是价值比较。 ( 编辑 :我知道还有更多这个。) 但为什么(.1f + .2f).Equals(.3f) true ,while (.1d+.2d).Equals(.3d)仍然是false ? .1f + .2f == .3f; // false (.1f + .2f).Equals(.3f); // true (.1d + .2d).Equals(.3d); // false

为什么我们必须重写Java中的equals()方法?

我对我们重写.equals方法的原因有一些困惑。 例如: Test test1 = new Test(3); Test test2 = new Test(3); // The if comparison statement do same thing // which the overridden `.equals()` method does. if(test1.equals(test2)){ System.out.println("test1 and test2 are ture in .equal"); } // Override .equals method. public boolean equals(Object object) { if(object instanceof Test && ((Test)object).getValue() == this.t) { return true; […]

为什么“true”== true在JavaScript中显示false?

MDC描述==运算符如下 : 如果两个操作数的types不同,JavaScript会转换操作数,然后进行严格的比较。 如果任一操作数是一个数字或一个布尔值,操作数将尽可能转换为数字。 否则,如果任一操作数是一个string,则另一个操作数将被转换为一个string(如果可能)。 考虑到这一点,我会评估"true" == true ,如下所示: 他们是同一types吗? 没有 操作数是数字还是布尔值? 是 我们可以转换成一个数字吗? 否 ( isNaN(Number("true")) // true ) 操作数是string吗? 是 我们可以将另一个操作数转换为string吗? 是 ( String(true) === "true" // true ) 我已经结束了string"true"和"true" ,这应该评估为true ,但JavaScript显示错误。 我错过了什么?

比较两个string,在C#中忽略大小写

可能重复: 不同的string比较方法有什么区别 以下哪两项更有效率? (或者也许还有第三个select,更好呢?) string val = "AStringValue"; if (val.Equals("astringvalue", StringComparison.InvariantCultureIgnoreCase)) 要么 if (val.ToLowerCase() == "astringvalue") ?

Javastring:compareTo()与equals()

当在Java中testingString的平等时,我总是使用equals()因为对我来说这似乎是最自然的方法。 毕竟,它的名字已经说明了它打算做什么。 不过,我最近告诉我的一位同事被教导使用compareTo() == 0而不是equals() 。 这感觉不自然(因为compareTo()是为了提供一个sorting而不是比较的相等),甚至有点危险(因为compareTo() == 0并不一定意味着在所有情况下都是平等的,即使我知道它对于String ' s)给我。 他不知道为什么他被教会使用compareTo()而不是equals()来处理String ,而且我也找不到任何理由。 这真的是个人品味的问题,还是有任何方法的真正原因?

Apache Commons equals / hashCode builder

我很想知道,这里的人们在考虑使用org.apache.commons.lang.builder EqualsBuilder / HashCodeBuilder来实现equals / hashCode ? 这会比写自己的做法更好吗? 它与Hibernate一起玩吗? 你怎么看?

为什么我们不能用'=='来比较两个浮点数或双数

我正在阅读约书亚·布洛赫(Joshua Bloch)撰写的Effective java,而在第8条中:当重写equals时服从一般合约 , 对于浮动字段,请使用Float.compare方法; 并为双字段使用Double.compare。 由于存在Float.NaN,-0.0f和类似的双常数,需要对float和double域进行特殊的处理; 有人可以解释我为什么我们不能使用==浮点或双比较

什么使参考比较(==)在Java中的一些string工作?

我有以下几行代码来比较string。 str1不等于str2,这是可以理解的,因为它比较了对象引用。 但是为什么s1等于s2? String s1 = "abc"; String s2 = "abc"; String str1 = new String("abc"); String str2 = new String("abc"); if (s1==s2) System.out.println("s1==s2"); else System.out.println("s1!=s2"); if (str1==str2) System.out.println("str1==str2"); else System.out.println("str1!=str2"); if (s1==str1) System.out.println("str1==s1"); else System.out.println("str1!=s1"); 输出: s1==s2 str1!=str2 str1!=s1