0

公共类 EqualsTest {

public static void main(String[] args) {

    String s1 = "abc";
    String s2 = s1;
    String s5 = "abc";
    String s3 = new String("abc");
    String s4 = new String("abc");
    System.out.println("== comparison : " + (s1 == s5));
    System.out.println("== comparison : " + (s1 == s2));
    System.out.println("Using equals method : " + s1.equals(s2));
    System.out.println("== comparison : " + s3 == s4);
    System.out.println("Using equals method : " + s3.equals(s4));
}

}

输出:

== comparison : true
== comparison : true
Using equals method : true
false
Using equals method : true

谁能解释上面的 s3==s4 的输出是如何变成假的,这也是如何等于标签操作的,我的意思是它的工作原理?

4

3 回答 3

0

“==”运算符比较内存位置(这两个变量名是否都指向同一个实例)而“.equals()”比较值(即使不同的副本,它们是否共享相同的内容?)

于 2013-07-28T06:45:07.173 回答
0

如果我没记错的话, == 运算符会在您这样定义 s3 和 s4 时比较对象。由于对象不同(没有相同的地址或内存位置;通常称为引用) - 运算符给出错误。== 运算符适用于其他示例,因为您正在比较原始字符串。这是一个原因(至少在我的经验中) == 不是一个好的选择,您应该始终使用 .equals 以确保您正在比较字符串而不是对象本身。

于 2013-07-28T06:45:21.503 回答
0

显然 s3 和 s4 与价值相等,但不是对象明智的。所以s3==s4是假的,因为它是比较内存位置。

==你可以了解java中和equals()的区别。

“<code>==”运算符

在 Java 中,当“==”运算符用于比较 2 个对象时,它会检查对象是否引用内存中的同一位置。换句话说,它检查这两个对象名称是否基本上是对同一内存位置的引用。

equals() 方法

equals 方法在 Object 类中定义,每个类都是该类的直接或间接后代。默认情况下,equals() 方法的行为实际上与“==”运算符相同——这意味着它检查两个对象是否引用内存中的相同位置。但是,equals 方法实际上是为了比较 2 个对象的内容,而不是它们在内存中的位置。

于 2013-07-28T06:45:31.520 回答