2016-03-05 56 views
-2
public int scoreUp(String[] key, String[] answers) { 
    int score = 0; 
    for (int i = 0; i < key.length; i++) { 
    if (key[i] == answers[i]) 
     score += 4; 
    else if (answers[i] != "?" && answers[i] != key[i]) 
     score--; 
    } 
    return score; 
} 

这适用于http://codingbat.com/prob/p180365,但它使用==来比较字符串而不是equals方法吗?怎么来的?这是如何返回正确的输出?

+5

这不是一个编译错误 – Tunaki

+1

不应该有一个编译错误 - 它只是不会给你正确的结果,因为它比较引用(即指针),而不是内容本身 – noamgot

+0

对不起,我没有'不是'编译'。我的意思是,如果方法比较对象地址而不是字符串,方法如何处理输入并生成正确的输出? 您可以亲自测试,复制上面的代码并将其粘贴到我提供的链接中。 – Nico

回答

0

2串之间的比较有效的参考if (key[i] == answers[i])

没有理由编译器抱怨,其实这可能是一个逻辑的方法来检查,如果对象是相同的。

如果这是比较字符串的正确方法是另一个问题。

+0

对不起,我不是指'编译'。我的意思是,如果方法比较对象地址而不是字符串,方法如何处理输入并生成正确的输出? 您可以亲自测试,复制上面的代码并将其粘贴到我提供的链接中。 – Nico

1

如何返回正确的输出?

如果key阵列和answer阵列既使用实习字符串,然后==是有效的比较。

这是一个危险的假设做出,所以程序员应该总是使用equals()比较字符串,即使实习有保证的,因为这样的保证可能会在未来消失,微妙隐含的假设可能被忽略。总是使用equals()是未来的代码防护。