为什么比较方法中的字符串不起作用?

时间:2019-08-26 19:23:26

标签: java string

我有2个类,第二个类的对象在第一个类中创建。我正在使用next()方法来增加秒的值,然后我想检查其值是否为0,并且无法通过使用.equals(“ 0”)方法来通过。

我正在用Java 11开发Eclipse

public void tick(){
      seconds.next(); //var "seconds" is of type second class(calling 
                       //      seconds means toString() from 2nd class)
      if(seconds.equals("0")) { 
          System.out.println("CANNOT ACCESS THIS ????");
      }

第二个类的方法next():

public void next() {
        if(value==upperLimit)   value=0;
        else ++value;
    }

    public String toString() {
        return value+"";
    }

我希望先在tick()方法中运行if语句,但不会。

1 个答案:

答案 0 :(得分:2)

根据代码的结构,您将Java字符串误用于直接完成更好的功能(即使用OOP技术或其他数据类型)。

seconds.equals("0")实际上并没有导致toString被隐式调用。相反,它只是为equals类调用second方法;在这种情况下,您尚未定义它,因此使用默认值(引用相等)。显然,您的second实例不等于字符串"0"的引用。

如果可以从班级外部访问if(second.value==0),请使用value,或创建一个吸气剂:

int getValue() { return value; }

并使用if(second.getValue() == 0)

如果您确实想比较字符串,则可以使用seconds.toString().equals("0");这将显式使用您的toString方法将您的实例转换为字符串。然后,您在实际上使用字符串相等逻辑的equals()对象上调用java.lang.String