Java:String.equalsIgnoreCase(...)无法正常工作

时间:2011-11-11 19:31:03

标签: java

我正在用Java开发一个小应用程序。以下if条件永远不会成立,是否有人知道实际原因?

public int foo()
{

String sTitle = "title";
if (sTitle.equalsIgnoreCase(MyCustomObject.sTitle))
    return 5;
else
    return 6;
}

它总是返回6.我在调试模式下运行它并看到两个字符串包含相同的值。 我也尝试过交换两个字符串的位置,如:

MyCustomObject.sTitle.equalsIgnoreCase(sTitle)

但这也不起作用。

5 个答案:

答案 0 :(得分:4)

实际原因是MyCustomObject.sTitle没有值“title”或任何案例变体。

检查分配变量的位置和时间。

答案 1 :(得分:2)

我假设MyCustomObject.sTitle也是一个字符串。

我的第一次调试尝试是在测试相等性之前添加以下行: System.out.println("*"+MyCustomObject.sTitle+"*"); 并检查空格。

答案 2 :(得分:2)

尝试将此代码添加到foo方法:

if (sTitle.length() != MyCustomObject.sTitle.length())
{
  System.out.println("I hate the truth");
}
else
{
  System.out.println("The mystery remains!");
}

答案 3 :(得分:1)

EqualsIgnoreCase方法

将此String与另一个String进行比较,忽略大小写。如果两个字符串具有相同的长度,则认为它们是相等的忽略大小写,并且两个字符串中的相应字符等于忽略大小写。 两个字符c1和c2被认为是相同的,如果至少满足下列条件之一,则忽略大小写:

两个字符相同(通过==运算符进行比较)。 将Character.toUpperCase(char)方法应用于每个字符会产生相同的结果。 将Character.toLowerCase(char)方法应用于每个字符会产生相同的结果。

基于以上所述,MyCustomObject.sTitle的值与上述任何条件都不匹配。

答案 4 :(得分:1)

如前作者所写,MyCustomObject.sTitle不会返回“title”的任何变体。您可以尝试运行这段代码,您可以自己证明不是equalsIgnoreCase方法不起作用。

public static void main(String[] args) {
    System.out.println(foo());
}

public static int foo()
{

String sTitle = "title";
if (sTitle.equalsIgnoreCase(MyCustomObject.sTitle))
    return 5;
else
    return 6;
}

public static class MyCustomObject {
    public static String sTitle = "TITLE";
}