Является ли Java оценкой оставшихся условий после того, как известен логический результат?

То есть, если у меня есть оператор, который оценивает несколько условий, скажем, оператор «или», например, так ..

if(isVeryLikely() || isSomewhatLikely() || isHardlyLikely()) { ... } 

В случае, когда isVeryLikely() возвращает true во время выполнения, будет isSomewhatLikely() и isHardlyLikely() выполнить? Как насчет того, что вместо методов они были статическими булевыми?

|| и && операторы замыкаются.

 true || willNeverExecute(); false && willNeverExecute(); 

Первое, что вам нужно отметить, это то, что условные операторы Java могут принимать только логические значения, в отличие от других языков, таких как C / C ++, где любое ненулевое значение будет оцениваться как true.

При этом существует 2 типа операторов, первый из которых известен как типы схем-схем:

 && and || 

в то время как другие – типы NON-короткого замыкания:

 & and | 

Для типов коротких замыканий, как только логический вывод можно найти в качестве ответа на выражение, остальная часть инструкции будет сброшена. Для типов NON-Short-Circuit они будут продолжать оценивать все условия.

Имея это в виду, что у вас есть:

 if(isVeryLikely() || isSomewhatLikely() || isHardlyLikely()) { ... } 

Java будет:

  1. Сначала проверьте, верна ли функция isVeryLicious (). Если это правда, это не будет продолжаться дальше.
  2. Если isVeryLicious () возвращает false, тогда вызывается isSomewhatLicious (), чтобы увидеть, возвращает ли он значение true. Если true, ничего другого, если оценивается. Если false, перейти 3.
  3. isHardlyLicious () вызывается. Если true, целое выражение истинно, иначе false, целое выражение – false.

Вся концепция, о которой вы спрашиваете, это «Как Java оценивает логические выражения». Хороший вопрос 🙂

Надеюсь, поможет! Ура!

Нет, java использует оценку короткого замыкания в выражениях с использованием || и && . См. Здесь для получения дополнительной информации.

Потому что || короткое замыкание, утверждение будет оценено как true, как только оно достигнет первого истинного условия, независимо от того, являются ли операнды статическими.

Короче говоря, две другие функции не будут оцениваться, если первая возвращает true.

Короткий ответ: он будет оценивать, пока не будет достаточно, чтобы сделать вывод, является ли это T / F.

Есть что-то, называемое boolean short-circuiting . По существу, он попытается оценить только то, что ему нужно (если вы используете операторы && или ||) и оставить. Вы можете воспользоваться этим несколькими способами:

 (a() || b()) 
  1. Если b () выкинет исключение, если a () истинно, тогда он даже не попытается проверить b (). Тип механизма проверки цепи.

  2. Если последние оценки являются ресурсоемкими, вы можете переместить их до конца оценки (например, b () занимает 10 раз дольше)

  3. Если наиболее вероятный путь можно определить по определенному предложению, поставьте его первым. Это также ускорит выполнение.

Будь то логическое выражение, указанное в вопросах, является статическим булевым, или они являются методами, возвращающими логическое значение, в обоих случаях – оценка выражения начинается слева, а условия будут оцениваться один за другим. Первое условие, которое дает значение true, приведет к короткому замыканию оценки. Он будет напрямую давать результат как истинный, если остальные условия не будут оцениваться. Вот как работает || (OR) на Java, используя концепцию оценки короткого замыкания.

Если вы хотите больше узнать о коротких замыканиях в целом, вы можете ссылаться на статью, которую я написал в своем блоге – http://www.javabrahman.com/programming-principles/short-circuiting-or-short-circuits-in- булевы-оценки-в-программирования-и-Java /

  • Загрузка многостраничного файла на Google Appengine с использованием jersey-1.7
  • Обновить данные в fragmentе ViewPager
  • Как преобразовать Set в String ?
  • Android-разрешение не работает, даже если я его объявил
  • Java: вызов метода внешнего classа в анонимном внутреннем classе
  • SimpleXML выбрасывает XmlPullParserException, unterminited entity ref без причины
  • Android с длинным касанием
  • Как установить выбранный элемент Spinner по значению, а не положением?
  • android, что не так с openFileOutput?
  • Круглые до двух знаков после запятой
  • Чтение и отображение данных из TXT-файла
  • Давайте будем гением компьютера.