2
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);
  }
}

我不明白在 changeName 方法中将 name 作为参数传递的目的。是否与 String name = "Shakespeare"; 有任何关系?

4

3 回答 3

5

这个例子的重点(我相信)是为了表明 Java 使用按值传递的语义。

变量 in的(按值)传递给. 接收该值作为参数的初始值。namemainchangeNamestr

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

但是,当我们回到该main方法时,下一个诊断行显示 的值name没有改变。如果 Java 使用真正的 pass-by-reference,那么更改str也会发生变化name——但事实并非如此,因为 Java 使用 pass-by-value。

于 2013-07-10T03:40:08.100 回答
2

这里的要点是,即使您将strin的值更改changeName为“Dickens”,变量nameinmain()也不会受到影响。

于 2013-07-10T03:41:23.247 回答
-2

我不明白在 changeName 方法中将 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 是按值传递的。

即当你传入方法namechangeName,两个引用(namestr)指向同一个对象。稍后str指向其他对象。但name仍然指向较早的对象。

于 2013-07-10T03:43:53.320 回答