0

在java中为以下类生成的代码有什么不同:

class A_noConstructor
{
    public static int par1;
    public static int par2;

    void method1(){
    }
    void method2(){
    }

}

class A_wConstructor 
{
    public static int par1;
    public static int par2;

    public A_wConstructor(){
    }

    void method1(){
    }

    void method2(){
    }

}

class B_noConstructor 
{
    void method1(){
    }
    void method2(){
    }

    public static int par1;
    public static int par2;

}


class C_noConstructor 
{
    public static int par1;
    void method1(){
    }
    public static int par2;
    void method2(){
    }

}

如果我直接用 B_noConstructor 或 C_noConstructor 替换 A_noConstructor 类,par1 和 par2 在所有情况下都具有相同的内存地址吗?由于编译器会以不同的方式解析这些类的源代码,编译器为这些类生成的符号表会有什么不同吗?

编辑: void A_wConstructor() 更改为 public A_wConstructor();

4

2 回答 2

0

答案很大程度上取决于编译器。有很多方法可以用机器代码表示相同的源代码,然后编译器可以有例如优化选项,它们也会产生影响。因此,仅仅因为生成的代码在特定情况下可能是相同的,你不能依赖它总是正确的。

于 2013-05-26T09:26:20.190 回答
0

使用(只有没有参数的构造函数)或没有构造函数创建的类没有区别。无论如何,编译器将为您创建一个构造函数SYNTHESIZED DEFAULT CONSTRUCTOR

但是顺序可能会有所不同(但它不是明确的;对我们来说没有区别)符号表将按解析顺序更新(添加文字、变量......)。

单独的顺序会有所不同,内存地址可能会改变,但它与表条目相关联。所以它对于单独调用函数很有用。我认为它不会导致任何性能问题或差异。

于 2013-05-26T09:26:41.897 回答