虽然条件为真,但代码不会输入if语句

时间:2013-09-23 21:56:58

标签: android android-intent

我正在开发一个Android应用程序。我的第一个活动中有一个字符串。我使用intent.putExtra()将该字符串传递给我在第一个活动中开始的第二个活动。以下是活动代码的相关部分:

第一项活动

final ListView lv = (ListView) findViewById(R.id.listView1);
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
        String selectedFromList = (lv.getItemAtPosition(arg2).toString());

        Intent content_umre_Intent = new Intent("com.uygulama.hacc.ContentActivity");
        content_umre_Intent.putExtra("key", selectedFromList);
        startActivity(content_umre_Intent);
    }
 });

第二项活动

Context context = getApplicationContext();                      
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
String text = getIntent().getStringExtra("key").toString();

if(text=="abc"){
    toast.show();
}

这里有一些古玩。我把toast.show()放在if语句之外,我看到它等于“abc”。

然而,即使变量text完全等于“abc”,它也不会进入if语句。

你知道为什么会这样吗?我找不到任何理由。我现在真的需要帮助。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

没什么太好奇......改变

if(text=="abc"){

if("abc".equals(text)){

比较Strings时,==会比较它们是否引用同一个对象。您需要.equals()来比较它们是否具有相同的值。

你可以这样做

if(text.equals("abc")){

但我发布的第一种方式可以防范NPE

非主题

为什么toString()值为String

String text = getIntent().getStringExtra("key").toString();

此外,如果您位于Activity内,而不是内部类或侦听器内部,那么您可以使用this代替Context而不是创建变量。它可能不会对此产生任何影响,但取决于您使用Context的内容可能会导致问题,因为您使用的是Application Context而不是Activity Context ...请注意。< / p>

答案 1 :(得分:1)

尝试

if(text.equals("abc")){
    toast.show();
}

答案 2 :(得分:0)

  

== 测试参考相等。

     

.equals()测试值相等

它与等于

一起使用的java字符串比较
if(text.equals("abc")){
    toast.show();
}

但我会推荐

if("abc".equals(text)){
    toast.show();
}

因为如果text为null,则会抛出Exception,但第二次不会自动处理.equals(object)

如果你不打扰这个案例,也可以这样做

"abc".equalsIgnoreCase(text)