如题,
我在某个调用函数外定义一个String变量,并初始化为空:
String str="";然后,一个调用函数声明为:
void call(String strParm);并且,将str作为call的参数:
call(str);在call内,给str赋值:
void call(String strParm)
{
   strParm = ....; //调试显示strParm已经赋上值
}但是,当退出call时,
str还是""。请教,
该如何在call中给str赋值啊?
谢谢!

解决方案 »

  1.   

    调用call的时候只是把str的地址赋值给你call的参数了,你改变你call参数的值这并没有改变str的所表示的地址,所以没有变你可以不用传参的形式,将str做为一个类的属性,然后直接在call中使用即可
    public class Test {
    private String str;
    public void call() {
    str = "new";
    }
    }
      

  2.   

    恩 这样是正确的因为当你执行完了call这个方法之后 str还是之前的str没有变化Java里是这样实现的  当你调用call(str)时,会赋值一个对象给call的形式参数strParm  所以一切的变化只是对于strParm来做的 当call方法结束  strParm也就销毁了 对于str是没有任何改变 除非你把call方法改成String call(String strParm) 这样再把strParm返回给str这跟基本类型不一样
      

  3.   

    可以把str当成一个对象中的一个属性。比如说Form f = new Form()  f中有一个属性str  在call方法传入的参数是f  实现f.setStr()  这样就行了。
      

  4.   

    难道,java里就不能通过引用,
    在函数里给外部传进来的string参数赋值吗?或者通过类似C#的ref等关键字?
      

  5.   

    你把方法和str都设为static的吧
      

  6.   

    使用StringBuffer变通实现此效果,代码:
    public class TestClass {    public static void main(String[] args) {
            StringBuffer original = new StringBuffer();
            System.out.println(original);
            test(original);
            original.toString();
            System.out.println(original);
        }    public static void test(StringBuffer str) {
            str.append("Hello world");
        }
    }
      

  7.   

    用 void call(ClassName cn) { cn.str = ... }调用用 call(this);