作者:佚名 | 来源:网络 | 添加时间:2006-04-07 22:37:01 | 人气:1172
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类有点特殊!
不过String确实特殊,大概因为它本身是对象吧.str ="world",str指向新的对象,string还是原来对象的引用,所以输出的还是hello
至于你写的那个修改的是原来对象的属性,由于引用的是同一个对象,所以输出是hello world.
我想大概是这样
public class TestString
{
public TestString()
{
}
public static void main ( String[] args )
{
Mystring s = new Mystring("Hello");
Mystring m = new Mystring("Hello2");
modify(s,m);
System.out.println("s= " s.s);
}
public static void modify (Mystring s,Mystring m )
{
s = m;
}
}
按你的意思,把你的改成这样.
结果还是s= Hello
这回是String令人费解呢?还是Mystring令人费解呢?