本问题是从C++编程的一些常用习惯而来的,C++的函数一般都会引入一对行参,一个一个是传入的对象,另一个通过传入行参运算而返回的结果。
如:int calculate(CString src, CString dest);  src是传进入的行参,运算后通过dest把结果传出去,而运算的结果是成功还是失败通过int型返回。我就想能不能在java上也实现相似的功能,我就做了:
int calculate(String src, String dest); src是传进去了,而且运算后赋值到dest去,但是函数执行完毕到主函数的时候,dest的对象还是空的,按java的原理calculate函数传进去的是对象的引用,运算结束了赋予dest的值应该也可以包存下来,但是为什么我会失败呢,是我有什么地方做错了!请前辈指点一下,希望能附上一小段的测试代码,谢谢!

解决方案 »

  1.   

    String对象比较特殊,它是不能更改的,所以通过String对象的引用不能修改源对象,实际上是在函数中重新创建了一个String;
    要完成楼主的功能,可以改用StringBuffer就可以了
      

  2.   

    public class Test {
    public static void main(String[] args) {
    StringBuffer sbSrc = new StringBuffer("hello");
    StringBuffer sbDest = new StringBuffer();
    System.out.println("before calulate:");
    System.out.println(sbSrc.toString());
    System.out.println(sbDest.toString());
    int number = calculate(sbSrc, sbDest);
    System.out.println("after calulate:");
    System.out.println(sbSrc.toString());
    System.out.println(sbDest.toString());
    System.out.println(number);
    } public static int calculate(StringBuffer src, StringBuffer dest) {
    for (int i = 0; i < src.length(); i++) {
    dest.append(src.charAt(i));//仅仅是为了示例而已;
    }
    return src.length();
    }
    }
      

  3.   

    楼上说的对,用String 外面的引用和参数的引用是只向两个不同的空间,StringBuffer只向同一空间.
      

  4.   

    如果在int calculate(StringBuffer src, StringBuffer dest)中,对于dest对象我直接赋值:dest = src;函数调用结束之后dest还是一个空的对象,那是在dest对象在函数体中的地址和原来调用的时候已经不一样了吗,所以在主函数中的dest地址依然是空的??
      

  5.   

    楼主的代码要在函数中new一个sting对象,然后反回该对象
      

  6.   

    lxw1982217(文龙),你的意思是在函数体里面
    public static int calculate(String src, String dest) {
    String tmp = new String("result Dest");
    dest = tmp;
             return 0;
    }
    这样吗??但是这样也是不行的啊!!返回的还是一个空的对象!!
      

  7.   

    public static String calculate(String src) {
    String tmp = new String("result Dest");
    if(**) return tmp ;
             else return null;
    }
      

  8.   

    malligator(大螟) 如果按你的思路就和我的设想就完全不一样了!!