日期:2014-05-20 浏览次数:20670 次
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));
------解决方案--------------------
重点不是同一个对象有不同的内容,而是不同的对象有相同的内容。
------解决方案--------------------
我给你举个例子,看注释:
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关键词创建的,是两个不同的对象,虽然对象内容是相同的,但句柄指向的对象肯定是不同的;
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内容
堆和栈 具体我也分布清楚了,,,