我正在用Java开发一个小应用程序。以下if条件永远不会成立,是否有人知道实际原因?
public int foo()
{
String sTitle = "title";
if (sTitle.equalsIgnoreCase(MyCustomObject.sTitle))
return 5;
else
return 6;
}
它总是返回6.我在调试模式下运行它并看到两个字符串包含相同的值。 我也尝试过交换两个字符串的位置,如:
MyCustomObject.sTitle.equalsIgnoreCase(sTitle)
但这也不起作用。
答案 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";
}