日期:2014-05-20  浏览次数:20670 次

java同一个对象能拥有不同的内容么?
在《Java语言程序设计》基础篇(美Y.Daniel Liang著)机械工业出版社208页8.2.3字符串的比较中有这样一段话:

[color=#FF0000]然而。==运算符只能检测string1和string2是否指向同一个对象,不能判断是否具有相同的内容。因此,不能使用==运算符判断两个字符串变量是否具有相同的内容。[/color]

这句话怎么理解 有例子最好

------解决方案--------------------
Java code
String s = "abc";
        String s1 = "abc";
        System.out.println(s == s1);
        System.out.println(s.equals(s1));
        String s2 = new String("abc");
        String s3 = new String("abc");
        System.out.println(s2 == s3);
        System.out.println(s2.equals(s3));

------解决方案--------------------
重点不是同一个对象有不同的内容,而是不同的对象有相同的内容。
------解决方案--------------------
我给你举个例子,看注释:
Java code

public class Test
{
    public static void main(String[] args)
    {
        String s1 = new String("abc");
        String s2 = new String("abc");
        String s3 = s1;
        System.out.println(s1 == s2); // false。“==”判断同一个对象是否有相同的内容
        System.out.println(s1 == s3);//true。此时是s1和s3同一对象,且内容相同
        System.out.println(s1.equals(s2));// true。“equals”判断对象是否有相同内容
    }
}

------解决方案--------------------
Java的机制是先在堆中找有没有相同的对象,s1找到了s相同的内容,他们是相同对象,两个句柄s和s1指向的内容都是一样的,内容也一样;s2和s3都是new关键词创建的,是两个不同的对象,虽然对象内容是相同的,但句柄指向的对象肯定是不同的;
Java code
String s = "abc";
        String s1 = "abc";
        System.out.println(s == s1);
        System.out.println(s.equals(s1));
        String s2 = new String("abc");
        String s3 = new String("abc");
        System.out.println(s2 == s3);
        System.out.println(s2.equals(s3));

------解决方案--------------------
童鞋~ 你先到这看看 要是还不明白 那就加我Q 我再讲给你
http://tieba.baidu.com/f?kz=612659683
------解决方案--------------------
好吧 我又忘记留Q 1040382767
------解决方案--------------------
没错同一个对象是拥有同样的内容,,,但是一个对象可以有不同的引用的地址我们可以随便更改这时就不能用==比较引用地址,,好比这样 a地址。a内容 b地址。a内容 c地址。a内容
堆和栈 具体我也分布清楚了,,,