求助: 一道简单的java程序。。。。。
public class TestString{
public static void link(String a){
a += "World ";
}
public static void main(String[] args){
String a = "Hello ";
link(a);
System.out.println(a);
a = a+ " World ";
System.out.println(a);
}
}
程序执行的结果是:
Hello
Hello World
既然String是不变类,
为什么执行a = a+ " World ";后
a 变化了啊?
为什么是输出Hello World,
不变类到底是怎么回事?
请高手指点一二……
谢谢
------解决方案--------------------String 中的字符串是不可修改的
a = a+ " World "; 这句用a和world生成了一个新的String赋给了a
------解决方案--------------------String对象的确是不可更改的,a = a+ " World ";这句生成一个新的String对象赋给a,原来的旧对象被回收。
------解决方案--------------------a+ "World "这条语句产生了一个新的临时对象,a=a+ "World "将新的对象的引用赋给a,所以这个操作是可行的,
关于这点你可以用以下语句验证:
String a = "hello ";
String b=a;
System.out.println(a==b);//true
a = a+ " World ";
System.out.println(a==b);//false;
------解决方案--------------------执行a = a+ " World "后,+号把两个字符串连接后赋给了a,相当于a的内存链接发生了变化,而 "hello "字符串并未发生变化
static修饰的方法的是静态方法,其是独立于对象存在的。所以在static void main静态方法中引用它是不需要申明它的一个对象的实例,而是直接引用了其方法名。
而在方法中申明的变量其的作用域仅为方法内,所以在link方法中,当把a作为参数传递后,其值并未改变。