Ciao a tutti stavo dando un'occhiata agli parte del codice sorgente di Java, quando mi sono imbattuto in questo (java.lang.Character
):char_x <(char_y + 1) == char_x <= char_y?
public static boolean isHighSurrogate(char ch) {
return ch >= MIN_HIGH_SURROGATE && ch < (MAX_HIGH_SURROGATE + 1);
}
public static boolean isLowSurrogate(char ch) {
return ch >= MIN_LOW_SURROGATE && ch < (MAX_LOW_SURROGATE + 1);
}
Mi chiedevo perché ha fatto lo scrittore ha aggiunto 1 al limite più alto e facendo un meno di confrontare , invece di fare semplicemente un confronto minore o uguale?
Posso capire se aiuta la leggibilità, ma in questo caso non sembra essere il caso.
Mi chiedevo che cosa è la differenza tra il codice qui sopra e questo:
public static boolean isHighSurrogate(char ch) {
return ch >= MIN_HIGH_SURROGATE && ch <= MAX_HIGH_SURROGATE;
}
public static boolean isLowSurrogate(char ch) {
return ch >= MIN_LOW_SURROGATE && ch <= MAX_LOW_SURROGATE;
}
Questa è un'ipotesi, non una risposta: forse deve essere coerente con il modo idiomatico di scrivere per loops, ad es. 'for (i = LOWER_BOUND; i
Forse voleva sottolineare che ch può anche essere uguale a MAX_ [HIGH | LOW] _SURROGATE. "<=" è più facile da leggere come "<" - e il compilatore probabilmente lo ottimizza comunque nello stesso bytecode. –
Beh, per prima cosa, 'MAX_HIGH_SURROGATE' è un char e' 1' è un int ... potrebbe esserci qualche tipo di conversione da char a int andando lì che potrebbe essere necessario. – BoltClock