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

rem*_*emi 2 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";
  }

}
Run Code Online (Sandbox Code Playgroud)

在这里,b.foo可以是foo1或者foo2.好处foo1很简单:只需要​​一个地方来定义字符串名称,如果我们需要更改它,只需在此更改即可.但我被告知使用foo1将某种方式"导入"A的代码到B中,这样编译后的B类可能会使用foo1而不是代替foo2.这是真的?我假设使用foo1相当于C#define.

ass*_*ias 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
Run Code Online (Sandbox Code Playgroud)