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