Come said in JVMS8
:Qual è lo scopo del tipo `boolean` in JVM?
Anche se la Java Virtual Machine definisce un tipo booleano, fornisce solo supporto molto limitato per esso. Non ci sono istruzioni Java Virtual Machine solo dedicate alle operazioni su valori booleani. Al contrario, le espressioni nel linguaggio di programmazione Java che operano su valori booleani vengono compilate per utilizzare i valori del tipo di dati int Java Virtual Machine.
In effetti, questi due metodi:
boolean expr1(boolean a, boolean b) {
return a || b;
}
int expr2(int a, int b) {
return ((a != 0) || (b != 0)) ? 1 : 0;
}
produrrà stesso codice byte (ad eccezione firma del metodo)
boolean expr1(boolean, boolean);
Signature: (ZZ)Z
Code:
0: iload_1
1: ifne 8
4: iload_2
5: ifeq 12
8: iconst_1
9: goto 13
12: iconst_0
13: ireturn
int expr2(int, int);
Signature: (II)I
Code:
0: iload_1
1: ifne 8
4: iload_2
5: ifeq 12
8: iconst_1
9: goto 13
12: iconst_0
13: ireturn
Quindi, non capisco il motivo per cui lo fa JVM
necessità boolean
tipo comunque? Solo per il controllo runtime delle firme dei metodi?
È possibile scrivere codice molto più pulito con un tipo 'boolean' piuttosto che con un' int' che emula un 'booleano'. –
@MickMnemonic Sure. Ma non parlo del linguaggio 'java', ma di' JVM' che non sa nulla del linguaggio 'java'. – Andremoniy
@sidgate La domanda non riguarda invece l'uso di '0/1'. La domanda riguarda, perché 'JVM' deve dichiarare un tipo speciale di tipo' booleano', non solo 'int', mentre non ha istruzioni speciali per' int'. Quindi non interrogarsi sulle specifiche 'java', ma sull'architettura' 'JVM'. – Andremoniy