不理解传递参数的调用方法

时间:2013-07-10 03:37:20

标签: java

package javaapplication1;

public class PassString {

  public static void main(String[] args) {

      String name = "Shakespeare";

      System.out.println("In main, the name is "
              + name);

      changeName(name); // i don't get why we pass name as an argument

      System.out.println("Back in main, the name is "
              + name);
  }

  public static void changeName(String str) {
      str = "Dickens";

      System.out.println("In changeName, the name " + "is now "
              + str);
  }
}

我不明白在nameName方法中将name作为参数传递的目的。它与String name =“Shakespeare”有什么关系;

3 个答案:

答案 0 :(得分:5)

示例(我相信)的目的是表明Java使用按值传递语义。

namemain变量的(按值)传递给changeName。它接收值作为参数str的初始值。

然后将str的值更改为对字符串“Dickens”的引用,并在方法结束时通过诊断验证该更改。

但是,当我们返回main方法时,下一个诊断线显示name的值未发生变化。如果Java使用了真正的pass-by-reference,那么更改str也会更改name - 但它没有,因为Java使用pass-by-value。

答案 1 :(得分:2)

这里的要点是,即使您将strchangeName的值更改为“狄更斯”,name中的变量main()也不会受到影响。

答案 2 :(得分:-2)

  

我不明白在nameName方法中将name作为参数传递的目的。

看起来您正在尝试更改name变量的值。

你应该这样做:

// in main
name = changeName(name); 

// see the change in signature
public static String changeName(String str)
{
    String newName =  "William " + str;
    return newName;
}
  

为什么name的值不会改变?

Java是按值传递。

即。当您在name方法中传递changeName时,两个引用(namestr)指向同一个对象。后来str指向其他一些对象。但name仍然指向早期的对象。