我有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语句,但不会。
答案 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
。