4

1)コードの下の2つの静的変数の違いは何ですか.

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


interface A{
String X = "XYZ";
}

2)両方の静的変数宣言が同じである場合、どちらが効率的ですか。

すなわち

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

特異性は、インターフェイスで定義されているすべてpublic finalの変数が特にそう言われていないことです。

于 2013-01-28T06:59:29.290 に答える
0
  1. パフォーマンスに違いはありません。
  2. これは、パフォーマンス指向というよりも、設計上の決定です。
  3. 定数を宣言するための私の選択は次のとおりです。

a。列挙型
b。インターフェース
c。クラス

この問題は「EffectiveJava」の本で簡単に説明されていたのを覚えています。

于 2013-01-28T07:04:44.213 に答える
0
  1. 作成されるフィールドの種類に関しては、違いはありません。どちらの方法でも定数フィールドが作成されます。
  2. 効率の違いは、あったとしてもごくわずかです。効率に関して言えば、ネットワークの遅延などにもっと注意を払う必要があります。これは、アプリケーションにこれの 1000 万倍の影響を与えますが、これはおそらく保守的です。この些細なことでは、読みやすさは効率よりもはるかに重要です。
于 2013-01-28T06:55:37.633 に答える