4

1)代码下面的两个静态变量有什么区别。

Class A{
public static final String  X = "XYZ";
}


interface A{
String X = "XYZ";
}

2)如果两个静态变量声明相同,那么哪个是有效的。

IE

Class A{
public static final String  X = "XYZ";

void print(){
System.Out.Println(X);
}
}

或者

interface B {
String X = "XYZ";
}


 Class A implements B{

    void print(){
    System.Out.Println(X);
    }
    }
4

5 回答 5

5
  1. 字段之间没有区别。从JLS 的第 9.3 节

    接口主体中的每个字段声明都是隐式公共的、静态的和最终的。允许为这些字段冗余地指定任何或所有这些修饰符。

  2. 性能没有差异,因为在这两种情况下,编译器无论如何都会“内联”字段值:在执行时,它无论如何都不会访问字段。只是这种情况,因为您正在使用String;如果该字段是原始类型或 以外的类型String,则代码访问该字段......但我不认为这会对性能产生重大影响,您不必担心。写出你能写的最清晰的代码。

于 2013-01-28T06:59:39.037 回答
1

1) 两个常数含义相同。默认情况下,接口中声明的字段是public static final.

2)界面中的字段不应该是首选。(除非您非常确信另一个接口不会有同名的字段)。

interface A
{
    String X = "XYZ";
}

interface B
{
    String X = "ABC";
}

class C implements A, B
{
    public static void main(String[] args)
    {
        System.out.println(X); // Ambigous X
    }
}

3) 效率不会受到放置常数的影响;在课堂或界面中。

于 2013-01-28T06:57:59.457 回答
0
  1. 就创建的字段类型而言,没有区别。两种方式都会创建一个常量字段。
  2. 如果有的话,效率上的差异可以忽略不计。在效率方面,您应该更关心网络延迟等。这将对您的应用程序产生 1000 万倍的影响,这可能是保守的。对于这些微不足道的事情,可读性远比效率重要,所以做最清楚的事情。
于 2013-01-28T06:55:37.633 回答
0

特殊性是接口中定义的所有变量都public final没有明确说明。

于 2013-01-28T06:59:29.290 回答
0
  1. 性能上没有区别。
  2. 这更多的是设计决策,而不是性能导向。
  3. 我选择声明常量的顺序是:

一种。枚举
b。接口
C. 课程

I remember this issue was briefly discussed in "Effective Java" book.

于 2013-01-28T07:04:44.213 回答