我有这门课,
public enum Test {
A("A"),
B("B"),
C("C"),
D("D");
private final String test;
Test(final String test) {
this.test = test;
}
public String getTestCode() {
return stateCode;
}
}在单元测试类中,我声明了以下全局变量,
private static final String A = "A";问题:
在单元测试类中,多个测试将对A的值使用。
就效率而言,纯粹从优化的角度来看(不管优化的规模有多小),这将更有效率。
还是一点关系也没有?
发布于 2015-07-23 00:40:33
private static final String A = "A";是编译时常量,它的值将内联,因此代码如下
String x = YourClass.A;将被编译为
String x = "A";如果
String x = Test.A.getTestCode();在接收getTestCode()之前,您需要调用"A"。
您可以使用javap -c命令检查它,这将允许我们查看我们类的编译版本。所以对于这样的代码
public class Demo {
private static final String A = "A";
void test1(){
String x = Demo.A;
}
void test2(){
String x = "A";
}
void test3(){
String x = Test.A.getTestCode();
}
}javap -c Demo显示
public com.stackoverflow.Demo();
Code:
0: aload_0
1: invokespecial #12 // Method java/lang/Object."<init>":()V
4: return
void test1();
Code:
0: ldc #8 // String A
2: astore_1
3: return
void test2();
Code:
0: ldc #8 // String A
2: astore_1
3: return
void test3();
Code:
0: getstatic #22 // Field Test.A:LTest;
3: invokevirtual #27 // Method Test.getTestCode:()Ljava/lang/String;
6: astore_1
7: return这意味着方法test1和test2实际上是相同的,而test3首先需要访问A枚举,然后调用其getTestCode方法。
发布于 2015-07-23 00:36:37
我喜欢枚举,因为它们为您提供了更大的扩展潜力(比如Test.B和Test.C以及其他帮助函数),但是为了清晰起见,您可能希望维护一个类变量:
Test testA = Test.A;然后打电话
testA.getTestCode();海事组织,虽然没有太大的区别,但是如果你只对一个变量这样做,那么使用枚举就不值得了。如果它是一个永远不会改变的值(看起来是这样的),那么使用最后一个变量可能会更好,因为它清楚地表明,值不应该更改。如果在声明的上方添加一条JavaDoc行,那么对于正在阅读您的代码的任何人来说,这一点就更加清楚了。
https://stackoverflow.com/questions/31576236
复制相似问题