#java
Пусть, есть выражение: int result = a1*function1() + a2*function2(); Где a1,2 - это коэффициенты 0 или 1. А function1,2 - это довольно тяжеловесные по вычислительной сложности функции. То если a1, например, равен нулю, будет ли вычисляться function1()? Или сразу примет значение 0?
Ответы
Ответ 1
То если a1, например, равен нулю, будет ли вычисляться function1()? Или сразу примет значение 0? Будет. Укороченная оценка (Short-circuit evaluation) работает только для двух логических (булевых) операторов && и ||.Ответ 2
Простейший способ узнать это, не прибегая к помощи SO - отладочный вывод в помощь: @Test public void ttt() { int a1 = 0; int a2 = 1; int result = a1 * function1() + a2 * function2(); System.out.println(result); } private int function1() { int result = 1; for(int i = 0; i < 1000; i++) { result *= new Random().nextInt() * new Random().nextInt(); } System.out.println("func1 calculated"); return result; } private int function2() { int result = -100500; for(int i = 0; i < 1000; i++) { result += new Random().nextInt() + new Random().nextInt(); } System.out.println("func2 calculated"); return result; } func1 calculated func2 calculated -1045391715 Ответ: да, function1 будет вычисляться.
Комментариев нет:
Отправить комментарий