我想定义一个函数,该函数有一个String类型的参数,函数中要求返回一个String的新值,该如何编写函数阿? 
下述定义方法为什么不行啊? 
void TestFunc(String sss) 

sss = new String("asdfafd"); 
} //调用 
String sv = "sadfa"; 
TestFunc(sv); 
//这时候sv还是原来的旧值啊,为什么不能更新呢?该如何定义呢?

解决方案 »

  1.   

    java的参数传递都是以值的形式传递
    如果是基本数据类型传递的就是数据本身ex)int a=1 acv(a)此时传进的就是1
    如果是对象传导函数中的就是函数的内存地址而不是对象本身
    相对于string类型 传进去的是string的一个引用
    即生成一个指向原string内存地址的引用
    此时两个引用都指向同一块内存
    对这个引用重新赋值后就指向新的内存地址 
    但是sv的指向地址是不变的
      

  2.   

    因为参数 sss 是一个引用,而且它与 string 是不同的引用,虽然它们都是同一个对象的引用。sss = new String("asdfafd");  则改变了sss 的值,使之指向了另一个对象,然而 sss 指向的对象改变了,但它并没有对 sv 造成任何影响,而且由于 sv 和 sss 是不同的引用,sss 的改变也没有对 sv 造成任何影响,结果就如例中所示。
      

  3.   

    // use org.omg.CORBA.StringHolder 
    // my code :import org.omg.CORBA.StringHolder;public class methodParameter
    {
        public static void main(String[] args)
        {
            MyTest itl = new MyTest();
            itl.Test();
        }    }class MyTest
        {
           private void TestFunc(StringHolder str) 
          { 
              str.value = new String("asdfafd"); 
        } 
        
        public void Test()
        {
            String sv = "sadfa"; 
              System.out.println(sv);
                 StringHolder sh = new StringHolder(sv);
                 TestFunc(sh); 
                 sv = sh.value;
                 System.out.println(sv);
        }
        
        
        }
      

  4.   

    我也试了一天时间了,原因是Java对于String类型变量作为函数参数比较特别,其实际是传值的,所以是没办法作为返回值,其余的采用new来分配的类对象都是传地址的,所以可以返回的
      

  5.   

    String是一个对象,对象引用按值传递,引用只能改变对象的状态,即只能改变对象里的属性值,而不能改变对象本身
      

  6.   

    Java对String的传递参数没有任何特别!
    如果你在方法中修改了传入参数的内容,如list.add, stringbuffer.append方法,则会同时影响到外部的变量而如果你修改的是指向,如obj = new ...这样,则不可能影响到外部的变量内容