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

Nar*_*ian 2 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

我不理解在nameName方法中将name作为参数传递的目的.它与String name ="Shakespeare"有什么关系;

Jon*_*eet 5

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

的的name变量中main(通过值)传递changeName.它接收值作为参数的初始值str.

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

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