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();
答案很大程度上取决于编译器。 可以有很多方法在机器代码中表示相同的源代码,然后编译器可以有例如优化选项也能发挥作用。 因此,仅仅因为生成的代码在特定情况下可能是相同的,您就不能相信它总是正确的。
使用(只有不带参数的构造函数)或不使用构造函数创建的类没有区别。不管怎样,编译器会为你创建一个构造函数SYNTHESIZED DEFAULT CONSTRUCTOR。
但是顺序可能会有所不同(但它并不明确;对我们来说没有区别) 符号表将按解析顺序更新(添加文字、变量……)。
仅顺序会有所不同,内存地址可能会改变,但它与表条目相关。所以它对于单独调用该函数很有用。我认为这不会导致任何性能问题或差异。