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应该是foo1or foo2。的好处foo1很简单:只有一个地方来定义字符串名称,如果我们需要更改它,只需在此处更改即可。但是有人告诉我 usingfoo1会以某种方式将 A 的代码“导入”到 B 中,因此编译后的 B 类可能使用foo1而不是foo2. 这是真的?我假设 usingfoo1相当于 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 回答