savedInstanceState = getIntent().getExtras();
String type = savedInstanceState.getString(TYPE);
if(type == "tree")
{
setContentView(R.layout.activity_sound_tree);
}
else
{
TextView tv = (TextView) findViewById(R.id.heading_sound);
tv.setText("'"+type+"'");
}
我在第二个活动中使用了这段代码。我肯定知道type == tree。所以我不明白为什么第一个“if”块失败了。它总是进入“else”块,即使我100%确定类型==“树”。有人能指出我正确的方向吗?
答案 0 :(得分:3)
永远不要将字符串值与==
运算符进行比较。请改用equals
方法。
==
运算符按引用比较对象,而不是按值。
Javadoc:http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)
固定代码:
savedInstanceState = getIntent().getExtras();
String type = savedInstanceState.getString(TYPE);
if(type.equals("tree"))
{
setContentView(R.layout.activity_sound_tree);
}
else
{
TextView tv = (TextView) findViewById(R.id.heading_sound);
tv.setText("'"+type+"'");
}
答案 1 :(得分:0)
这看起来像classic String comparison question,请尝试
"tree".equals(type); // This is also safe from NullPointerException since you are comparing type with a constant 'tree', which is not null
为何等于?
有关使用==
与equals()
的详细说明,请here
答案 2 :(得分:0)
使用
type.equals("tree")
而不是
type == "tree"
<强>原因强>
equls方法检查对象的值,其中==运算符检查它们是否是同一个对象实例。