2015-07-11 70 views
-1

我无法理解,为什么这个代码不工作为什么如果(value ==“imperial”)在Android中不起作用?

if(value=="imperial"){ 
    high=high*1.8 + 32; 
    low=low*1.8 + 32; 
     } 

但是,当我使用equals()方法,然后它工作流利....

if(value.equals(getString(R.string.imperial))){ 
       high=high*1.8 + 32; 
       low=low*1.8 + 32;} 

其中value是一个字符串而R.string.imperial引用字符串“imperial”。

+0

'=='比较我认为的实际对象。尝试'.equals(“imperial”)' – Uroc327

+2

'=='vs'.equals()':'String'是一个对象,因此您将'value'的内存位置与内存中的位置进行比较'字符串'文字''帝国''。它们的内存位置不同,因此'=='失败,而'.equals()'被'String'类重写以比较'char'值。所以如果'value =“imperial”'那么'value.equals(“imperial”)'是'true'。 注意:有些人使用'“imperial”.equals(value)'来代替,这就消除了'NullPointerException'的可能性。 –

+0

可能的重复[如何比较Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –

回答

2

一般来说,当你想测试两个字符串是否相等时,你应该使用.equals==测试引用相等,而.equals测试值相等。

对于更深入的答案,看看问题How do I compare strings in Java?

0

看到这个计算器的相关问题:Java String.equals vs ==

从这个问题的答案由@Alnitak:

使用string.equals(字符串等)功能比较字符串,不 的==运营商。

函数检查字符串的实际内容,==运算符 检查对象的引用是否相等。请注意, 字符串常量通常是“interned”的,使得两个具有 相同值的常量实际上可以与==进行比较,但最好不要依赖 。

相关问题