Java平等不起作用?

时间:2012-11-22 05:57:55

标签: java binary equals

public class Binary {

    private int _DecNum;
    private String _BinNum;

    public Binary(int n) {
    _DecNum = n;
    _BinNum = ConvToBinR(n);
    }

    public static String ConvToBin(int n) {
    String a = "";
    while(n > 1) {
        a = (n % 2) + a;
        n = n /2;
    }
    return n + a;
    }

    public String toString() {
    return _BinNum;
    }

    public boolean equals(Object a) {
    return this == a || (a instanceof Binary && this._BinNum == ((Binary) a)._BinNum);
    }

    public static void main(String[] args ) {
    int a = Integer.parseInt(args[0]);
    int b = Integer.parseInt(args[1]);
    Binary Zero = new Binary(a);
    Binary One = new Binary(b);
    System.out.println("Base 10: " + a + " in Base 2: " + Zero);
    System.out.println(Zero.equals(One));
    }
}
嗨,大家好!我的平等功能由于某些原因无法解决。 this._BinNum ==((二进制)a)._ BinNum;即使我将a和b的值设置为相等,也会给我一个错误的陈述。有人可以帮忙吗?谢谢!

6 个答案:

答案 0 :(得分:4)

就像您使用equals方法来比较实例一样,您还应该使用equals方法来比较字符串: -

this._BinNum.equals(((Binary) a)._BinNum)

另外,我不明白您为什么在this == a方法中进行equals比较。除非您在传递的同一实例上调用equals方法,否则它将始终返回false。所以你不需要那个。只需使用: -

public boolean equals(Object a) {
    return (a instanceof Binary && this._BinNum.equals(((Binary) a)._BinNum));
}

您似乎正在尝试将Decimal值转换为Binary String。你已经在Integer类中有了一个方法。使用Integer#toBinaryStringInteger#toStringradix: -

Integer.toBinaryString(5);
Integer.toString(5, 2);

这当然是为了您将来的参考,因为可以手动进行学习。


作为旁注,您应该在代码中关注Java Naming Conventions,以便日后其他用户可以轻松阅读。

  • 变量和方法名称应以小写字母,美元或下划线开头。

答案 1 :(得分:4)

_BinNum是一个字符串,所以使用

this._BinNum.equals(((Binary) a)._BinNum)

答案 2 :(得分:2)

您应该使用equals()方法来比较字符串而不是==运算符。 ==比较对象引用而不是对象内容

答案 3 :(得分:2)

这是两个不同的对象,它们的引用是不同的,不相等。

使用String的{​​{1}}方法。

答案 4 :(得分:1)

您应该尝试使用stringA.equals(stringB)功能

答案 5 :(得分:1)

运算符“==”将根据对象的哈希码查看对象是否相等。但是,它不会在对象中寻找值。

然而,equals()方法将检查对象中的值。所以,尝试使用stringA.equals(stringB)