我已经尝试了几十种不同的组合,我不知道为什么它不起作用 - 它的逻辑完全合理。
我正在从先前的活动传递一个包,该活动已将值从微调器存储到字符串中。我正在读取字符串,如果它与我指定的任何内容相同 - 就是按照那个方式行事。
我已经将字符串直接打印到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>
答案 0 :(得分:5)
==
是比较两个对象,equals
或equalsIgnoreCase
是比较两个对象的值。
答案 1 :(得分:3)
使用equals
或equalsIgnoreCase
比较字符串不要使用==
。
应为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
所以从不使用==字符串。