类别中文件位置的影响?

问题描述 投票:0回答:2

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();

java class constructor
2个回答
0
投票

答案很大程度上取决于编译器。 可以有很多方法在机器代码中表示相同的源代码,然后编译器可以有例如优化选项也能发挥作用。 因此,仅仅因为生成的代码在特定情况下可能是相同的,您就不能相信它总是正确的。


0
投票

使用(只有不带参数的构造函数)或不使用构造函数创建的类没有区别。不管怎样,编译器会为你创建一个构造函数SYNTHESIZED DEFAULT CONSTRUCTOR

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

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

© www.soinside.com 2019 - 2024. All rights reserved.