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);
    }
}

В выражении int b = a > 10 ? a : a + 10; проверяется условие, стоящее до знака вопроса. Если оно истинно, то переменной b присваивается результат выражения, находящегося между знаками вопроса и двоеточия. Если условие ложно, то присваивается результат выражения, находящегося после двоеточия.

Создано