1)代码下面的两个静态变量有什么区别.
Class A{
public static final String X = "XYZ";
}
interface A{
String X = "XYZ";
}
Run Code Online (Sandbox Code Playgroud)
2)如果两个静态变量声明都相同,那么哪个是有效的.
即
Class A{
public static final String X = "XYZ";
void print(){
System.Out.Println(X);
}
}
Run Code Online (Sandbox Code Playgroud)
要么
interface B {
String X = "XYZ";
}
Class A implements B{
void print(){
System.Out.Println(X);
}
}
Run Code Online (Sandbox Code Playgroud)
字段之间没有区别.从JLS第9.3节开始:
接口主体中的每个字段声明都是隐式的public,static和final.允许为这些字段冗余地指定任何或所有这些修饰符.
性能没有区别,因为在这两种情况下,编译器都会"内联"字段值:在执行时,它无论如何都不会访问字段.这只是因为你正在使用的情况String; 如果字段是原始类型以外的类型,或者String代码将访问该字段...但我不希望这会对性能产生显着影响,您不应该担心它.写下最清晰的代码.