当前位置:编程学习 > JAVA >>

关于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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,