不知怎的,这个if语句不起作用?

时间:2011-12-15 15:32:40

标签: java android

您好我在Eclipse上开发了新的Android 4.0 SDK。

不知何故,这个简单的if语句不起作用。 我通过捆绑从另一个活动获取数据:

Bundle gotBundle = getIntent().getExtras();
gotPack = gotBundle.getString("key");
Toast.makeText(this, gotPack, Toast.LENGTH_SHORT).show();

我已经尝试输出“gotPack'在toast和alert对话框中,两者都返回一个字符串值' Pattern 1'。 (这是我到目前为止所想要的)

现在,当我尝试使用if语句时:

  if (gotPack == "Pattern 1") {
     filePath="android.resource://" + getPackageName() + "/" + R.raw.p2;   
     Toast.makeText(this, "WORKED1", Toast.LENGTH_SHORT).show();
  }

它拒绝进入if语句,我测试了它,因为它不会产生toast输出或任何其他结果。我能做错什么? gotPack最初被识别为字符串。

6 个答案:

答案 0 :(得分:3)

==与Java中的对象一起使用来比较引用,以检查它们是否引用完全相同的对象。您想要使用.equals(),例如:

"Pattern 1".equals(gotPack)

答案 1 :(得分:1)

对于字符串比较,您需要使用.equals()

if ("Pattern 1".equals(gotPack)) {

Java对象通常以国会大厦字母(* O * bject,* S * tring,* L * ist,* I * nteger)开头,而大写字母是小写字母(* i * nt,* d * ouble)。任何对象都必须覆盖.equals()方法,以便对对象进行正确的比较,否则你要比较内存引用而不是对象本身。

答案 2 :(得分:1)

不要使用==

比较字符串
if (gotPack.equals("Pattern 1")) {

应该做的伎俩

答案 3 :(得分:1)

在Java中,您应该使用equals比较字符串,如下所示:

"Pattern 1".equals(gotPack)

这应解决您的问题

当你使用==时,如果String都引用同一个对象

,它将起作用
String str1 = "test";
String str2 = "test";

在这种情况下str1 == str2将是真的

但如果是这样的话:

String str1 = "test";
String str2 = new String("test");

在这种情况下str1 == str2将为false,但str1.equals(str2)将为true,因为equals会对值进行比较,而不会对引用进行比较。

答案 4 :(得分:1)

==运算符的工作方式是查看这两个元素并查看它们是否位于相同的内存地址。这意味着如果两个相等的字符串位于不同的内存位置,==将无法识别它。

相反,您应该使用equals()方法。

if (gotPack.equals("Pattern 1")) {
  ...
}

答案 5 :(得分:1)

试试这个:

if (gotPack.equals("Pattern 1")) {
 filePath="android.resource://" + getPackageName() + "/" + R.raw.p2;   
 Toast.makeText(this, "WORKED1", Toast.LENGTH_SHORT).show();
 }

String comparison with Android, look for equals