1.问题提出
Java中的String字符串对象的内容不可改变。刚学习Java时对于字符串对象的理解不够深入,尤其是String对象。所以有时会对其运行过程不大清楚,在此加以说明。
2. 举例说明
例1:
public class StringTest ...{
public static void main(String[] args) ...{
String a = "Hello";
link(a);
System.out.println(a);
}
/** *//**
*
* 功能:传入a对象,测试函数调用完后a的值。
*
* @param a
*/
public static void link(String a) ...{
a += " World";
System.out.println("a : " + a);
}
}
public static void main(String[] args) ...{
String a = "Hello";
link(a);
System.out.println(a);
}
/** *//**
*
* 功能:传入a对象,测试函数调用完后a的值。
*
* @param a
*/
public static void link(String a) ...{
a += " World";
System.out.println("a : " + a);
}
}
该程序输出结果如下:
a : Hello World
Hello
Hello
3. 运行过程说明
String a = "Hello"; 这条语句执行后确实产生了一个指向字符串“Hello”的引用。
当调用方法link()时,在方法体内部又有了新的对象“Hello World”(这是字符串连接后得到的字符串对象)。在方法体内部输出的是“Hello World”,但在方法体外部输出时却是“Hello”。
这是因为对象a在方法link()中传入的是a的拷贝,在方法体内引用的拷贝最后指向的是连接后的客串,而原来的对象(“Hello”)的引用不变。