比较字符串从bundle到本地值

时间:2012-01-23 04:44:54

标签: java android bundle

我已经尝试了几十种不同的组合,我不知道为什么它不起作用 - 它的逻辑完全合理。

我正在从先前的活动传递一个包,该活动已将值从微调器存储到字符串中。我正在读取字符串,如果它与我指定的任何内容相同 - 就是按照那个方式行事。

我已经将字符串直接打印到TextView上,以确保我得到预期的结果,而且我 - 但它仍然不会注册。

    TextView tv;

    Bundle extras = getIntent().getExtras();
    tv = (TextView) findViewById(R.id.textView2);
    tv.append(extras.getString("pageNumber"));
    tv = (TextView) findViewById(R.id.textView3);
    int base = Integer.parseInt(extras.getString("pageNumber")) * 70;
    tv.append(Integer.toString(base));

/* Here is where I'm editing */
    tv = (TextView) findViewById(R.id.textView4);
    String plat = extras.getString("platform");
    if (plat == "Wordpress") tv.append("900");

我的strings.xml的数组在我的strings.xml中定义,如下所示:

    <string-array name="platform_array">
    <item>None</item>
    <item>Joomla</item>
    <item>Wordpress</item>   
    <item>Drupal</item>
</string-array>

3 个答案:

答案 0 :(得分:5)

==是比较两个对象,equalsequalsIgnoreCase是比较两个对象的值。

答案 1 :(得分:3)

使用equalsequalsIgnoreCase比较字符串不要使用==

应为if (plat.equals("Wordpress")) tv.append("900");

if (plat.equalsIgnoreCase("Wordoress")tv.append("900");如果您希望编译器查找小写和大写。

答案 2 :(得分:1)

是的,这是Java与C ++完全不同的地方之一。

简答:使用==比较基元,使用equals()来比较对象。

答案很长:比较两个对象时,==会告诉您它们是否是同一个对象。有时你可能会关心这一点,但它们非常罕见。通常,您关心对象的内容,因此您希望使用equals()。这假设对象的类以有用的方式实现equals(),而不仅仅是inheriting from java.lang.Object.

还有一个额外的皱纹字符串。 Java字符串是不可变的;您无法更改现有字符串的内容,您只能将字符串变量设置为指向不同的字符串对象。因此,如果编译器遇到两个相同的字符串,它可以选择通过用一个字符串替换它们来优化事物。在这种情况下,==运算符可能会产生意外结果:

    String a = "a";
    String b = "a";
    (a == b)  // evaluates to true

所以从不使用==字符串。