作者:多米音乐_35872875 | 来源:互联网 | 2023-10-14 19:00
如here所述,javac和其他Java编译器可能为条件为“ConstantExpression”的if语句提供代码消除功能.如果我的代码使用依赖于不同包中定义的其他常量表达式的
例如
根据here的说法,javac和其他Java编译器可以满足以下条件
“常数表达式”的if语句提供代码去除功能。
如果在代码中使用依赖于在不同包中定义的其他常量表达式的常量表达式,这将如何影响?
例如,假设相应的指定包具有以下类:
包foo;
公共类foo {
publicstaticfinalbooleancOndition=false;
}
和
包包包;
import foo.Foo;
公共类bar {
公共语音测试(
if(foo.condition ) {
system.out.println (' thislineofcodecouldbeeliminated.';
} else {
system.out.println (' thislineofcodewillbeexecuted.';
}
}
}
当然,如果foo-package在运行时从外部jar文件加载,编译器在技术上不能假设Foo.CONDITION为false,因此不应该消除if-statement的实际分支。
如果Foo和Bar实际位于同一包中,则绝对应该删除真正的分支(如果编译器完全支持代码删除)。
虽然不确定如何最好地说这个问题,但是为了在Bar中被视为不变,Foo如何“接近”需要在Bar中继续表现吗? 他们需要在同一个文件里吗? 同样的包装吗? 同一jar文件? 还是不重要? 也就是说,编译器是否总是将Foo.CONDITION视为常量,并在编译过程中使用在构建路径中找到的值?