29

未使用のインポートを次のように行います - import android.widget.RelativeLayout; メモリを食べる?どれだけ価値があるか知りたいだけですか?たぶんこれはばかげた質問ですが、答えが見つかりません。

4

5 に答える 5

48

いいえ、メモリは必要ありません。インポートは、コンパイル時にクラス名を解決するためにコンパイラによって使用されます。

コンパイラは、各クラス名を完全修飾名に変更します。そして import ステートメントを削除します。そのため、インポートステートメントはバイトコードになりません。

ワイルドカード インポートで発生する唯一の問題は、名前空間の競合です。つまり、同じ名前の 2 つの型が 2 つの異なるパッケージで定義されている場合、ワイルドカードを使用してこれらのパッケージをインポートすると、使用されている型の名前が競合します。


コンパイラが import ステートメントをどのように置き換えるかを確認するには、javapコマンドを使用してクラスのバイト コードを生成します。以下のコードを検討してください。

import java.util.*;
import java.util.regex.*;

public class Test {
    public static void main(String[] args) {

    }
}

上記のコードをコンパイルし、次のコマンドを使用してバイト コードを確認します。

javap Test

次の出力が得られます。

public class Test {
  public Test();
  public static void main(java.lang.String[]);
}

Stringしたがって、 type が完全修飾名に置き換えられjava.lang.String、バイトコードに import ステートメントがないことがわかります。

于 2013-08-09T18:54:52.830 に答える
12

いいえ、コンパイラはコンパイル後にそれらを削除します。しかし、あなたが直面するかもしれない2つの問題

  1. コードの混乱
  2. jar からいくつかのクラスをインポートし、後で jar を削除してもインポートは削除しない場合、コンパイル時エラーが発生する可能性があります
于 2013-08-09T18:55:38.650 に答える
1

未使用のインポートは実行時に影響しません (バイトコードにインポートがないため)。ただし、未使用のインポートはコンパイラに影響しますが、それほど影響はありません。

一般に、必要なものだけをインポートすると、コードの保守性と可読性が向上します。

于 2013-08-09T18:55:28.627 に答える
0

ランタイム コンパイラ時間に影響はありません。

しかし、最善の方法は、できるだけ明確で単純なコードを書くことです。これにより、コードの保守性が向上し、変更後も適切に機能することが保証されます。

ドキュメント:パフォーマンスのベスト プラクティス

于 2017-01-02T10:47:02.690 に答える