2

次のクラスを想定します。

class A {
  public static final String someString = "thisIsSomeString";

  // then potentially lots of non static members and functions.

}

class B {
  void foo1() {
    String someStringFromA = A.someString;
  }

  // OR

  void foo2() {
     String someStringFromA = "thisIsSomeString";
  }

}

ここでは、またはb.fooのいずれかfoo1である必要がありますfoo2。の利点foo1は簡単です。文字列名を定義する場所は 1 か所だけです。変更する必要がある場合は、ここで変更するだけです。しかし、 usingfoo1は何らかの方法で A のコードを B に「インポート」するため、コンパイルされたクラス B は、foo1代わりにfoo2. これは本当ですか?foo1usingは C の #define と同等であると想定しました。

4

1 に答える 1

8

実際にはどちらも定数がインライン化されるB.classため、違いはありません。多くの場合、より読みやすく保守しやすいオプションを選択してください。

これは私が得るバイトコードです:

void foo1();
  Code:
     0: ldc           #3                  // String thisIsSomeString
     2: astore_1
     3: return

void foo2();
  Code:
     0: ldc           #3                  // String thisIsSomeString
     2: astore_1
     3: return
于 2013-03-12T16:59:12.440 に答える