Разница между & и && в Java?

Возможные дубликаты:
В чем разница между | и || в Java?


Разница в и &&

Мне просто интересно, какая разница между & и &&? Через несколько дней я написал условие для оператора if, выглядевшего примерно так:

if(x < 50 && x > 0)

Однако я изменил && на & и не обнаружил ошибок. Какая разница?


Пример: я скомпилировал эту простую программу:

package anddifferences;

public class Main {

    public static void main(String[] args) {
        int x = 25;
        if(x < 50 && x > 0) {
            System.out.println("OK");
        }

        if(x < 50 & x > 0) {
            System.out.println("Yup");
        }
    }
}

Он напечатал "OK" и "Yup". Так ли имеет значение, какой из них я использую, если они оба работают?

Ответ 1

& побитовое. && является логическим.

& оценивает обе стороны операции.
&& оценивает левую часть операции, если она true, она продолжает и оценивает правую сторону.

Ответ 2

& побитовый оператор И, сравнивающий бит каждого операнда.
Например,

int a = 4;
int b = 7;
System.out.println(a & b); // prints 4
//meaning in an 32 bit system
// 00000000 00000000 00000000 00000100
// 00000000 00000000 00000000 00000111
// ===================================
// 00000000 00000000 00000000 00000100


&& является логическим оператором AND, сравнивающим только логические значения только операндов. Он принимает два операнда, указывающих логическое значение, и делает для них ленивую оценку.

Ответ 3

& & == logical AND

& = побитовое И

Ответ 4

'&' выполняет оба теста, а '& &' выполняет только 2-й тест, если первое верно. Это называется shortcircuiting и может считаться оптимизацией. Это особенно полезно для защиты от nullness.

if( x != null && x.equals("*BINGO*") {
  then do something with x...
}

Ответ 5

& & является логическим оператором

& является оператором бит

По-видимому, если вы немного сравниваете true с true, ответ верен, и если вы выполняете немного сравнения true и false, ответ будет ложным!