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