看下下面的代码:
为什么参数传到方法中,我改变了它的引用值。出来后为什么还是原来引用的结果。请问在方法中如何改变参数的值(不用return,因为如果需要改变很多的参数的值得话,肯定不能用return了)。
package com.yidao;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Test {
public static void main(String[] args) throws Exception {
String test = "1222";
test(test);
System.out.println(test);
}

private static void test(String test)
{
test = "test";
}
}运行结果:1222

解决方案 »

  1.   


    String test = "1222";
    做为Test类的变量试试。
      

  2.   

    String当做参数传递的时候是生成一个新的对象,而不是使用原来的那个,自然看不到修改后的结果。换StringBuffer或者array,list之类
      

  3.   

    JAVA中试值传递的,不能改变参数的引用啊,如果参数是对象只可以该其状态啊,不能改变引用
      

  4.   


    package com.trisun.mail;public class TestParam { private static  String strParam;

    public static void main(String[] args) {
    strParam = "12222";
    test(strParam);
    System.out.println(strParam);
    }

    private static void test(String test)
        {
    strParam ="test";
          
        } public static String getStrParam() {
    return strParam;
    } public static void setStrParam(String strParam) {
    TestParam.strParam = strParam;
    }
    }
      

  5.   

    这里的两个test的作用域是不同的啊,main方法里的test与那个方法里的test是不一样的两个变量.相当于这样:String a="abc";
              String a1(相当于方法参数的那个a)=a;//在方法调用的时候,把"实参"->就是main方法中的test变量传给"形参"->也就是方法中的那个参数test,在方法使用的test是一样新的变量,如果我让这个变量引用新的对象,那么它肯定不会改变main方法中的test变量的引用,因为它们是不同的变量String a= new String("aaa");
    String b=a;//到这里它们是引用同一个对象的
    然后是  b = new String("cccc");//这是让b引用其它的对象了,但它并不改变a的引用,相当于方法中的那句代码.
      

  6.   

    private static void test(String test)
    这个是值传递
    public class Test {
        public static void main(String[] args) throws Exception {
            StringBuffer test = new StringBuffer("1222");
            test(test);
            System.out.println(test);
        }
        
        private static void test(StringBuffer test)
        {
            test.append("add tttt");
        }
    }
    我把String 改为StringBuffer  这样就是引用传递了
      

  7.   

    参数传进来时系统分配了一个新的String 类型的引用test(新),引用的地址指向旧的test地址,即test(新) = "1222".当你改变参数的值时,实际只是把新的引用指向新的内存地址,既test(新)="test".但旧的没改变,所以你输出旧的test当然是输出"1222"了.解决方法是设为全局变量或者实例变量,静态变量...反正不要局部变量就可以了
      

  8.   


    public class Test3{
        public static void main(String[] args){
            TestParam tp=new TestParam();
            tp.setTest("a");
            System.out.println(tp.getTest());
        }
    }
    class TestParam{
      private String test;
      public TestParam(){}
      public TestParam(String test){
        this.setTest(test);
      }
      public String getTest(){
        return test;
      }
      public void setTest(String test){
        this.test=test;
      }
    }
      

  9.   

    private static void test(String test) 只是把只过去过去了,test=“test”
    只是在字符串池里边再放一个字符而已 而没有改变main中局部变量的test的地址public static void main(String[] args) throws Exception {
            StringBuffer test = new StringBuffer("1222");
            aaa(test);
            System.out.println(test);
        }
        
        private static void aaa(StringBuffer test)
        {
    test.delete(0,test.length());
    test.append("test");
        }
      

  10.   

    哥们。不要用C语言的观点看JAVA
      

  11.   

    我给你改完了用StringBuffer就可以了
    代码已经测试了(7楼)
      

  12.   

    一般都是这样写啊,你为什么那样写呢?java中方法中的变量和类里面的变量还是有很多的差别的,再说main方法中的声明的test的作用域只在main里面,其他的地方怎么可以改呢?
      

  13.   

    java中实现的值传递,如果想保存变化后的结果,使用对象作为传递参数,如七楼所示
      

  14.   

    我徹底清楚了。
    如果大家還不太明白的。
    請參考:http://zhidao.baidu.com/question/68777881.html
      

  15.   

    楼主,此test非彼test。在test方法中,test是个局部变量,test值为“test”,但是在main函数中,test是另外一个局部变量,test值为“1222”。这是一个变量作用域的一个问题。可以看看java课本上相关部分的讲解。
      

  16.   

    楼主朋友其实是这样的,当一个方法被static定义的时候在运行的时候,就会在main方法前先调用。不行你把那个static去掉试试。
      

  17.   

    我以前也没搞清楚:java中,参数是传值还是传址。现在终于明白了。
      

  18.   

    string是具有值类型特点的引用类型