static void change(String str)
{
  str="abcde";
}public static void main(String[] args)
{
  str="1234";
  change(str);
  System.out.println(str);
}
结果为什么是1234,而不是abcde;

解决方案 »

  1.   

    静态方法是类方法结果为什么是1234,而不是abcde;
    这个结果和是否是静态方法没关系这是因为参数传递采用的是(基本类型)值传递,不是(对象类型)引用传递
      

  2.   

    应该是这样
    static String str;
    static void change() 

      str="abcde"; 
    }  public static void main(String[] args) 

      str="1234"; 
      change(); 
      System.out.println(str); 

    重新声明了一个变量
     change(String str) 
      

  3.   

    我觉得,这并不是静态方法的问题
    而应该是个变量作用域的问题。main方法中的str是个局部变量
    也就是说只是在main方法中有效。
    同样,change方法中的str也是个局部变量,所以也只是在change方法中有效。虽然change方法内部改变了str的值,但这个改变只在change方法中有效
    你又没有把改变后的str返回,
    所以,对于main方法中的str是没有任何影响的
    你可以把change方法改成下面这样 static void change(String str){
    System.out.println("before,str is:"+str);
    str = "change";
    System.out.println("after,str is:"+str);
    }就可以发现在change方法内是发生改变了的。或者,把这个方法改成返回一个String类型的变量,再赋值给main方法的str,也是发生改变的
      

  4.   

    因为static void change(String str)并没有改变str的值和状态
    java里对象作为参数时,将对象的引用(str)重新赋值(指向另一个对象),并不能改变原来变量(str)的值
      

  5.   

    跟静态方法没关系,只要是String类型的参数,都不会修改传入参数的值的。因为String仅仅是对基本类型char的封装,采用基本类型的值传递方式
      

  6.   

    在一个jvm里面,它的值是唯一的。
      

  7.   

    String 对象赋值了 就不能变了 除非重新赋值
      

  8.   

    静态方法只是告诉类在类加载的时候就初始化这个方法。
    这里的结果和静态方法没有关系,因为String是值传递,无法改变原来的String,所以结果是1234
      

  9.   


    static void change(String str)
    {
      str="abcde";
    }public static void main(String[] args)
    {
      str="1234";
      change(str);
      System.out.println(str);
    } 改成static void change(String notStr)
    {
      notStr="abcde";
    }public static void main(String[] args)
    {
      str="1234";
      System.out.println(str);

    大概你会好理解一点.
      

  10.   

      分析的在理
      在Java中只有值传递。
      

  11.   

    有这种情况,就是你的str也是静态的