java中费解or奇怪的String类

来源:互联网 发布:音频编辑软件64位 编辑:程序博客网 时间:2024/06/03 00:03

java中费解or奇怪的String类

在网上看到一篇这样的文章,而且广为流传。http://www.matrix.org.cn/resource/article/0/2.html

其中有一段是这样写的:

//////////////////////////////////////////////////////////////////////////

public class Test {
   public static void test(String str) {
   str += "World"; //我加上了个+号,我想他是忘了。
   }
   public static void main(String[] args) {
   String string = new String("Hello");
   test(string);
   System.out.println(string);
   }
}

  运行结果:
Hello
  为什么会这样呢?因为参数 str 是一个引用,而且它与 string 是不同的引用,虽然它们都是同一个对象的引用。str += "World" 则改变了 str 的值,使之指向了另一个对象,然而 str 指向的对象改变了,但它并没有对 "Hello" 造成任何影响,而且由于 string 和 str 是不同的引用,str 的改变也没有对 string 造成任何影响,结果就如例中所示。

/////////////////////////////////////////////////////////////////////////////

他的这段文字说明我看不懂..........

我把程序改了一下,如下:

class Mystring
{
 String s;
 Mystring(String sa)
 {
  s=sa;
 }
}

public class TestString {
    public TestString() {
    }

    public static void main(String[] args) {
        Mystring s=new Mystring("Hello");
        modify(s);
        System.out.println("s= "+s.s);
        
    }

    public static void modify(/*StringBuffer*/Mystring sm)
    {
        sm.s+= " world";
    }
}

结果为:

s= Hello world

因此,我只能说String类有点特殊!