class EqualsTest {
    public static void main(String[] arguments) {
        String str1, str2;
        str1 = "Free the bound periodicals.";
        str2 = str1;        System.out.println("String1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2));        str2 = new String(str1);        System.out.println("String1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2));
        System.out.println("Same value? " + str1.equals(str2));
    }
}
答案是String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? true
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? false
Same value? true
我不明白后面两个为什么是一个FALSE,一个为TRUE,知道者,帮我解释下

解决方案 »

  1.   

    ==是比较内存地址的,不是比内容
    str2 = str1;的话两者指向同一片内存
    str2 = new String(str1);的话两者指向两片不同的内存
      

  2.   

    哦,那System.out.println("Same value? " + str1.equals(str2));为什么是true呢,==与equals相等么
      

  3.   

    ==操作符专门用来比较变量的值是否相等
    对象内容的比较则是用equal方法
      

  4.   

    字符串是一对象的形式存放的,不是基本类型。所以string1和string2只是对象的引用。
    逻辑运算符“==”是判断两个引用是否是同一个对象。也就是他们所指向的地址是否相同。
    而"equals"方法是比较两个字符串的内容是否相同。
      

  5.   

    == 是判断是否是同一个引用
    equals 是判断其值是否相同
    书上说得很清楚,好好想想
      

  6.   

    如果对于简单类型(基本类型)那么==是判断其值是否相同;
    对于引用类型==是判断其引用地址是否相同;而equals是判断其值的。
      

  7.   

    又是这样的问题。
    强烈建议find
    google
    看书