引用B类中A类的公共最终静态字符串会增加编译类B的大小吗?

时间:2013-03-12 16:55:02

标签: java

假设以下类:

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可以是foo1foo2foo1的好处很简单:只有一个地方可以定义字符串名称,如果我们需要更改它,只需在此更改即可。但我被告知使用foo1会以某种方式“导入”A的代码到B中,因此使用foo1代替foo2编译的B类可能会大得多。这是真的?我假设使用foo1等同于C #define。

1 个答案:

答案 0 :(得分:8)

实际上两者都会导致B.class中的常量内联,所以没有区别。通常,选择更易阅读/可维护的选项。

这是我得到的bytcode:

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