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

通过引用操作对象会改变引用本身吗?
public   class   Test   {

public   static   void   main(String   []   args)
{
String   a=new   String( "aaa ");
String   b=new   String( "bbb ");
b=a;
System.out.println(a==b);    
a=a+ " ";
System.out.println(a==b);


System.out.println(a);
System.out.println(b);
}
}


为什么对a   操作之后   a==b   就是   false   了呢?
不还都是引用了同一个对象吗?



------解决方案--------------------
通过引用操作对象会改变引用本身吗?
================================
首先,答案肯定是 会。

之所以lz的实验得到这样的结果,是因为String类型本身比较特殊。
举个简单的例子
String a = "1 ";
String b = "2 ";
b = a;
a = a + "love ";
最基本的: b = 2 ; a = 1love。
有时候问题就是这么简单。
============================================================
大家看一下你是否知道下面的是输出结果:
public static void main(String[] args) ...{
String str1 = "abc ";
String str2 = new String( "abc ");
String str3 = new String();
String str4 = new String( " ");
System.out.println(str1 == str2);// ① false
System.out.println(str1.equals(str2));// ② true
System.out.println(str3 == str4);// ③ false
System.out.println(str3.equals(str4));// ④ true
String str5 = "a ";
String str6 = "b ";
String str7 = "ab ";
String str8 = "a " + "b ";
String str9 = "a " + str6;
System.out.println(str7 == str8);// ⑤ true
System.out.println(str7 == str9);// ⑥ true
System.out.println(str7 == str5 + str6);// ⑦ true
}
==========================================================
用eclipse跑了一下,发现错了2个, 6和7错了,有没有高人指点为什么错了。
请明确指点,不要再叫我看什么资料了,谢谢。