为什么equals可能不会返回true

时间:2012-04-12 12:11:59

标签: java equals

我在名为result。

的变量中有这个字符串:"no_questions_by_user"

比我这样检查:

if ( result != null && result.equals( "no_user_id" ) )
{
        Log.d( "Post execute: " , "NOOOT  OKKKK - no user id" );    
}
else
if ( result != null && result.equals( "database_error" ) )
{
        Log.d( "Post execute: " , "NOOOT  OKKKK - database error" );    
}
else
if ( result != null && result.equals( "no_questions_by_user" ) )
{           
        Log.d( "Post execute: " , "NOOOT  OKKKK - no questions by user so far" );   
}
else
{
  Log.d( "MyQuestionsActivity" , "In JSON parsing area.." );                
}

它始终是最后一个。但根据我的理解,它应该转到检查result.equals( "no_questions_by_user" )

的块

知道该块为什么不被执行?

谢谢!

6 个答案:

答案 0 :(得分:5)

代码看起来不错。您的变量result必须具有其他值。

我的猜测是结果字符串的结尾或开头有一些空格。

答案 1 :(得分:5)

就个人而言,我认为这段代码很乱。

我会编写一个接收结果的方法,并在Map中查找消息。所有这些如果测试让我的眼睛流血:

private static final Map<String, String> LOG_MESSAGE_MAP;

static {
    LOG_MESSAGE_MAP = new HashMap<String, String>();
    // put all your result, message pairs in here
}

public void logResultDependentMessage(String result) {
    log.debug(LOG_MESSAGE_MAP.get(result));
}

现在添加新结果,消息对只意味着插入地图。如果你正在使用类似Spring的东西,你可以在配置中进行,而不是触摸代码。

答案 2 :(得分:4)

尝试:

result.trim().equals( "no_questions_by_user" )

答案 3 :(得分:3)

您是否在调试器中看到“no_questions_by_user”?

您可以尝试在测试之前修剪它,因为在调试器中很难检测到空格。

答案 4 :(得分:1)

确保“result”变量的值中没有空格。 在输入if语句之前,您可以执行类似这样的打印行。

System.out.println("The Value of result variable is=\"" + result + "\"");

你也可以这样做

if ( result != null && result.trim().equals( "no_questions_by_user" ) )
{           
        Log.d( "Post execute: " , "NOOOT  OKKKK - no questions by user so far" );   
}

答案 5 :(得分:0)

我建议您使用一些静态变量来存储字符串,这样可以避免输入错误。