关于String 传址传值?
java对对象的传递是传址,对基本类型的传递是传值有下面一个测试程序
public class Test{
public void ChangeString(String s){
s = s + " Changed ";
}
public static void main(String args[]){
Test test = new Test();
String name = "name ";
System.out.println( "before : "+name);
test.ChangeString(name);
System.out.println( "after : "+name);
}
}
按照对象传址理解,调用方法以后name应该发生变化,而实际上却没有,不知道谁能解释一下! --------------------编程问答-------------------- 这个问题是经典的java String问题了
这个要联系内存图去理解
本来的String 是有个常量池的
这个类型是很特殊的!
还有就是 栈空间 需要理解下(就是你定义的那个引用所在的位置 传入的方法里面的引用是另外的一个栈空间了!)
在方法里面的那个修改的引用 指向的是另外的一个内存
但是并没有修改之前所对应的引用!
总的来说 你调用的方法修改的是一个引用所指向的内存。但是那个 引用并不是你之前传进来的引用。
除非你高个return 返回给调用这个方法地方
--------------------编程问答-------------------- 好多人问这种问题,推荐你去读一读String的代码。只能说String是一个特殊的类。String是传值。 --------------------编程问答-------------------- 因为String这个类是一个final类,自身是不可以修改的。 --------------------编程问答-------------------- 改变的String已经和原来的String不是同一个地址了。
String改变,会重新分配一个空间存新的String
补充:Java , Java EE