您是否尝试过编译并比较字节码?这是我的结果。对于:
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
Spec,您会发现有一个用于指定访问修饰符的大小固定的位字段,因此生成的文件大小相同也就不足为奇了。
简而言之,您的访问修饰符不会影响生成的字节码的大小(也不会影响性能)。您应该使用最有意义的访问修饰符。
我还应该补充一点,如果将内部类从声明更改
static为未声明
static,则会有细微的差别,因为这意味着引用外部类的附加字段。与声明内部类相比
static,这将占用更多的内存,但是您会为此疯狂地进行优化(
static在有意义的地方以及需要它为非静态的地方使用,使其成为非静态的,但是不要只为了在这里或那里保存内存指针而使设计复杂化)。



