java布尔表达式_Java中的布尔表达式优化
考虑Java中的以下⽅法:
果然的反义词是什么
public static boolean expensiveComputation() {
遵循英语
for (int i = 0; i < Integer.MAX_VALUE; ++i);
return fal;
}
以下主要⽅法:
public static void main(String[] args) {
boolean b = fal;
if (expensiveComputation() && b) {手机扫描仪
}
}
逻辑连接(与&&)相同是commutative operation.那么为什么编译器不会将if语句代码优化为等效代码:
公司奖惩管理制度if (b && expensiveComputation()) {
}
此外,编译器是否尝试对布尔值进⾏其他逻辑简化或置换以⽣成更快的代码?如果没有,为什么?当然,⼀些优化会⾮常困难,但我的例⼦并不简单?调⽤⽅法应该总是⽐读取布尔值慢,对吧?
先感谢您.
解决⽅法:
它不会这样做,因为expensiveComputation()可能有副作⽤,改变程序的状态.这意味着评估布尔语句中表达式的顺序(expensiveComputation()和b)很重要.您不希望编译器将错误优化到编译的程序中,对吗?
例如,如果代码是这样的话
按摩睾丸
public static boolean expensiveComputation() {
for (int i = 0; i < Integer.MAX_VALUE; ++i);
b = fal;
return fal;
}
public static boolean b = true;
public static void main(String[] args) {
if (expensiveComputation() || b) {老汤怎么熬制
// do stuff
争奇斗艳拼音}
}金花茶种植
在这⾥,如果编译器执⾏了优化,那么当你不希望它通过查看代码时会运⾏// do stuff(因为b,它最初是真的,⾸先被评估).