直接上代码:public class Test {
public static void main(String[] args) {
String str = new String("test");
// String str = "test";
changeStr(str);
System.out.println(str);
}

public static void changeStr( String str ) {
str = "change";
}
}请问:为啥str的值没变? 不是作为了引用传递传入了changeStr方法里了么?

解决方案 »

  1.   

    经典问题,因为String是常量,每当改变String的值时等于新new了一个String,并将其引用赋值给了str。
      

  2.   

    changeStr方法里面的str只是值和main方法里面的相同,不是同一个对象
    所以改变 changeStr方法里的str 对main方法不起作用
    除非你的str是一个静态变量 或者 changeStr返回值赋值给str
      

  3.   

    可以试试这个,笨是笨了点,可俺学java也就一周,很多地方不了解。public class TestTemp {
        public static void main(String[] args) {
            StringBuffer ss=new StringBuffer("test");
            func(ss);
            System.out.println(ss.toString());
        }
        private static void func(StringBuffer s){
            s.delete(0,s.length()).append("newvalue");
        }   
    }
      

  4.   

    main方法里的str与changeStr里的str根本就不是同一个str
      

  5.   

    public class TestNn {
        public static void main(String[] args) {
            String str2 = new String("test");
          String str = "Mingming";
          changeStr(str2);
          System.out.println(str2);
            changeStr(str);
            System.out.println(str);
        }
        
        public static void changeStr( String str )
        {
            str = "change";
        }
    }
    在参数传递的过程中,传的永远是值,这儿是地址不同,也就是不是同一个对象
      

  6.   

    public class Test {

        public static void main(String[] args) {
            String str = new String("test");
    //      String str = "test";
            
            System.out.println("str="+changeStr(str));
        }
        
        public static String  changeStr( String str ) {
            str = "change";
    return str;

        }
    }
      

  7.   

    string还有stringbuffer和一个什么来着记不太清楚,string是赋完值就不能改变,stringbuffer是分配一个空间,你每建一个就分配一个空间,可以改变值。
      

  8.   

    参数传递的只是引用的一份拷贝,并不是原来的引用str,所以在方法内只是改变了这个拷贝指向的string对象,对原来的引用不影响
      

  9.   

    那按你这么说,如果加个return语句怎么样,行吗,
      

  10.   

    没说错吧!String是常量???????
      

  11.   

    String类有不变性的,除非从新NEW 一次,不然是不会变的,String是引用类型,你说的这个只是传值而已,
      

  12.   

    你只是传进去参数了。但是在方法体内首先会寻找方法内的同名变量,并且由于你传递的变量并不是类中的静态属性或者是当前对象的引用,也没有返回值,所以无法改变外部的变量名称。你可以打印下两个str就会发现根本不是同一个str.你的写法只是改变了方法体内同名的str的值而没有改变外部的变量值。如需其他帮助和支持。欢迎加入我们的java开发联盟。
    群号:
       247286682
    来者请注明csdn.