If-else в Java
В Java оператор ветвления if-else имеет Си-подобный синтаксис: условное выражение заключается в круглые скобки, тело ветки – в фигурные.
if (логич_выражение) { выражение1; выражение2; … } else { выражениеN; … }
Если тело состоит из одного выражения, фигурные скобки можно не использовать.
if (логич_выражение) выражение1; else выражение2;
В случае множественного ветвления обычно используют вложение последующих веток if во внешние для них else с поднятием этого if к строке else.
if (…) { … } else if (…) { … } else if (…) { … } else { … }
Простыми логическими операторами являются ==, !=, <, <=, >, >=.
Логические операторы И, ИЛИ, логическое НЕ записываются соответственно &&, ||, !. В Java эти операторы применимы только к булевому типу данных, то есть нельзя писать, например, !var
или a < 3 || var
, если var – целое или любой другой отличный от boolean тип. То же самое касается циклов: while (true) {}
будет работать, while (1) {}
– нет.
При сравнении примитивных типов сравниваются их значения. Так в следующем коде ветка if выполнится:
int a = 3; int b = 3; if (a == b) { System.out.println(1); }
В случае ссылочных типов сравниваются ссылки. Чтобы быть равными, они должны указывать на один и тот же объект.
package info.younglinux.java; public class Logic { public static void main(String[] args) { Message a = new Message("Hello"); Message b = new Message("Hello"); Message c = b; if (a == b) { System.out.println("a == b"); } if (b == c) { System.out.println("b == c"); } } } class Message { private String m = ""; Message(String str) { this.m = str; } String getMessage() { return this.m; } }
В приведенной программе на экран будет выведено только b == c, так как обе переменные указывают на один и тот же объект. В то время как a и b – разные объекты.
В Java есть сокращенный вариант условного оператора для случая, когда есть две ветки – if и else, каждая включает только одно выражение, а результат выражений обоих веток может быть присвоен переменной одного типа. Такой оператор называется тернарным (ternary – тройной).
import java.util.Scanner; public class Ternary { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int a = scan.nextInt(); int b = a > 10 ? a : a + 10; System.out.println(b); } }
В выражении a > 10 ? a : a + 10;
проверяется условие, стоящее до знака вопроса. Если оно истинно, то переменной b присваивается результат выражения, находящегося между знаками вопроса и двоеточия. Если условие ложно, то присваивается результат выражения, находящегося после двоеточия.