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 メソッドで名前を引数として渡す目的がわかりません。String name = "Shakespeare"; に何らかの形で関連していますか?

4

3 に答える 3

5

この例のポイント (私は信じています) は、Java が値渡しのセマンティクスを使用していることを示すことです。

の変数のが(値によって) に渡されます。パラメータの初期値として値を受け取ります。namemainchangeNamestr

の値はstr文字列 "Dickens" への参照に変更され、その変更はメソッドの最後の診断によって検証されます。

ただし、メソッドに戻るとmain、次の診断行は の値がname変更されていないことを示しています。Java が真の参照渡しを使用していれば、変更strも変更されたはずnameですが、そうではありませんでした。Java は値渡しを使用しているためです。

于 2013-07-10T03:40:08.100 に答える
2

ここでのポイントは、strinの値changeNameを「Dickens」に変更しても、変数nameinmain()は影響を受けないということです。

于 2013-07-10T03:41:23.247 に答える