Для логического типа:
Операторы &
и &&
обрабатываются как логические И
Операторы |
и ||
рассматриваются как логические ИЛИ.
У вас также есть ^
, который выполняет XOR и !
, который выполняет NOT.
Как это работает в JVM и как оно сравнивается с побитовыми целочисленными операциями?
На уровне байтового кода FALSE имеет значение 0, а TRUE - значение. Из javap -c java.lang.Boolean
static {};
Code:
0: new #56; //class java/lang/Boolean
3: dup
4: iconst_1
5: invokespecial #89; //Method "<init>":(Z)V
8: putstatic #86; //Field TRUE:Ljava/lang/Boolean;
11: new #56; //class java/lang/Boolean
14: dup
15: iconst_0
16: invokespecial #89; //Method "<init>":(Z)V
19: putstatic #85; //Field FALSE:Ljava/lang/Boolean;
В этом коде он определяет TRUE как new Boolean(true)
, и вы можете видеть, что true
помещается в стек с помощью iconst_1
, что похоже на push (1). Аналогично iconst_0
или 0
используется для false
Если вы отобразите false
<=> 0
и true
<=> 1
, вы увидите, что &
и |
работают одинаково для int
и boolean