0

我正在尝试比较一个字符串和一个字符(在将其转换为字符串之后)。代码没有像我期望的那样工作。

package main;
import java.lang.Character;

public class Main {
    public static void main(String[] args) {
        char myChar = 'a';
        String myString = "a";
        if(myString == Character.toString(myChar)) {
            System.out.println("This SHOULD work! But it doesn't.");
        } else {
            System.out.println("This SHOULDN'T work! But it does.");
        }
    }
}

我在这里做错了什么?

4

4 回答 4

5

利用:

if(myString.equals(Character.toString(myChar)))

代替:

if(myString == Character.toString(myChar))

==测试两个引用是否指向内存中的同一个对象,whileequals方法检查两个引用是否指向同一个对象或者它们是否具有相同的内容。

于 2012-06-30T17:29:23.397 回答
1

为了比较字符串的相等性,我们使用 equals() 方法。java中有两种比较方式。一个是“==”运算符和另一个“equals()”方法。"==" 比较字符串对象的引用值,而 equals() 方法存在于 java.lang.Object 类中。此方法比较字符串对象的内容。.

因此,在您的情况下,如果“==”,最好使用 .equals() 代替。

于 2012-06-30T17:33:05.850 回答
0

不要使用 == 运算符来比较字符串。虽然嵌入到源代码的字符串文字可以与此运算符进行比较,但此方法不适用于字符串对象,您可以动态获取。

这是因为 == 比较的是对象的引用,而不是对象的值。

使用String.equals()方法来比较字符串对象。

于 2012-06-30T17:32:34.390 回答
0

字符串比较的一般规则:

  • ==比较引用(如果您来自 C,则为某种指针)
  • equals比较内容。

在您的情况下,您将两个不同的引用与两个不同的对象进行比较,这就是为什么它会返回false您期望的位置true。对于字符串比较,始终使用String.equals()方法

于 2012-06-30T19:50:01.103 回答