Android 虽然contiditon为true,但代码没有输入if语句

Android 虽然contiditon为true,但代码没有输入if语句,android,android-intent,Android,Android Intent,我正在开发一款android应用程序。我的第一个活动中有一个字符串。我使用intent.putExtra()将该字符串传递给我在第一个活动中启动的第二个活动。以下是活动代码的相关部分: 第一项活动 final ListView lv = (ListView) findViewById(R.id.listView1); lv.setOnItemClickListener(new OnItemClickListener() { @Override

我正在开发一款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语句

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


任何帮助都将不胜感激。

没有什么太奇怪的…改变

if(text=="abc"){

比较
字符串
时,
==
将比较它们是否引用相同的对象。您需要
.equals()
来比较它们是否具有相同的值

你可以照我说的做

if(text.equals("abc")){
但是我发布的第一个方法将保护您免受
NPE
的攻击

离题

为什么在
字符串上有
toString()

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

此外,如果您在
活动
中,而不是在内部类或侦听器中,则可以将
用于
上下文
,而不是创建变量。这可能不会造成任何伤害,但取决于您使用的是什么
上下文
,因为它可能会导致问题,因为您使用的是
应用程序上下文
,而不是
活动上下文
。请注意。

没什么奇怪的…更改

if(text=="abc"){

比较
字符串
时,
==
将比较它们是否引用相同的对象。您需要
.equals()
来比较它们是否具有相同的值

你可以照我说的做

if(text.equals("abc")){
但是我发布的第一个方法将保护您免受
NPE
的攻击

离题

为什么在
字符串上有
toString()

String text = getIntent().getStringExtra("key").toString();
此外,如果您在
活动
中,而不是在内部类或侦听器中,则可以将
用于
上下文
,而不是创建变量。这可能不会造成任何伤害,但取决于您使用的是什么
上下文
,因为它可能会导致问题,因为您使用的是
应用程序上下文
,而不是
活动上下文
。请注意。

尝试一下

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

=测试参考平等性

.equals()测试值是否相等

这是一个java字符串比较,它与equals

if(text.equals("abc")){
    toast.show();
}
但我建议

if("abc".equals(text)){
    toast.show();
}
因为若文本为null,第一个将抛出异常,第二个则不会,它将使用
.equals(object)

如果你不担心这个案子,你也可以这么做

"abc".equalsIgnoreCase(text)
=测试参考平等性

.equals()测试值是否相等

这是一个java字符串比较,它与equals

if(text.equals("abc")){
    toast.show();
}
但我建议

if("abc".equals(text)){
    toast.show();
}
因为若文本为null,第一个将抛出异常,第二个则不会,它将使用
.equals(object)

如果你不担心这个案子,你也可以这么做

"abc".equalsIgnoreCase(text)

如果我不知道。非常感谢,它成功了。我试图让它工作,我添加它没有任何理由:)我会在5分钟内接受你的答案OK,对我来说似乎是合理的;)很高兴它起作用了,我不知道。非常感谢,它成功了。我试图让它工作,我添加它没有任何理由:)我会在5分钟内接受你的答案OK,对我来说似乎是合理的;)很高兴它的工作原理如果所讨论的
已经覆盖了它的
equals()
,以测试该
的特定值,则这是正确的。由程序员决定
equals()
比较什么。默认情况下,
equals()
=
是等效的;它们都检查内存引用是否相等。如果所讨论的
已覆盖其
equals()
以测试该
的特定值,则这是正确的。由程序员决定
equals()
比较什么。默认情况下,
equals()
=
是等效的;它们都检查内存引用是否相等。