コンパイルしてバイトコードを比較してみましたか?これが私の結果です。為に:
public class Example {
public static void main(String[] args) {
System.out.println("Hello world!");
}
private static class A {
A(){}
}
}
上記により、次の *.class ファイルが生成されます。
-rw-r--r-- 1 michaelsafyan staff 238 Feb 10 00:11 Example$A.class
-rw-r--r-- 1 michaelsafyan staff 474 Feb 10 00:11 Example.class
ここで、クラス ファイルを移動し、private
修飾子を削除して再コンパイルすると、次のようになります。
-rw-r--r-- 1 michaelsafyan staff 238 Feb 10 00:15 Example$A.class
-rw-r--r-- 1 michaelsafyan staff 474 Feb 10 00:15 Example.class
クラス ファイルの VM 仕様を見ると、アクセス修飾子を指定するための一定サイズのビット フィールドがあることがわかります。そのため、生成されたファイルが同じサイズであることは驚くべきことではありません。
要するに、アクセス修飾子は、生成されたバイト コードのサイズに影響を与えません (また、パフォーマンスに影響を与えることもありません)。最も理にかなったアクセス修飾子を使用する必要があります。
static
また、内部クラスを宣言されているから宣言されていないに変更すると、わずかな違いがあることも付け加えておく必要がありますstatic
。これは、外部クラスを参照する追加のフィールドを意味するためです。これは、内部クラスを宣言した場合よりもわずかに多くのメモリを消費しますが、static
これを最適化するのは正気ではありません (static
意味のある場所で使用し、非静的にする必要がある場合は非静的にしますが、メモリのポインターをあちこちに保存するためだけにデザインを複雑にしないでください)。