Ответ 1
В Java,
if ( i != 0 )
- это идиоматический способ проверить, отличается ли целое число i
от zero
.
Если i
используется как флаг, он должен иметь тип boolean
, а не тип int
.
Я изучаю Java, исходя из C, и я нашел интересное различие между языками с типом boolean
. В C нет bool
/ean
, поэтому нам нужно использовать числовые типы для представления логической логики (0 == false
).
Я думаю, что в Java это не работает:
int i = 1;
if (i)
System.out.println("i is true");
Не меняет условное выражение с помощью typecast:
if ((boolean)i)
Итак, сделаем что-то вроде:
if ( i != 0 )
Есть ли другой способ выполнить логическую проверку C-ish в типе int
? Просто интересно, были ли какие-либо трюки Java, которые позволяют логическую логику для небулевых типов, подобных этому.
EDIT:
Приведенный выше пример был очень упрощенным и уступил себя узкому кругу мышления. Когда я задал вопрос первоначально, я думал о небулевых возвращениях из вызовов функций. Например, вызов Linux fork()
. Он не возвращает int
как таковой, но я мог бы использовать числовое возвращаемое значение для условного выражения, как в:
if( fork() ) {
// do child code
Это позволяет мне обрабатывать код в условном выражении для дочернего элемента, в то время как это не делается для родителя (или в случае отрицательного результата возврата для ошибки).
Поэтому я не знаю достаточно Java, чтобы дать хороший пример "Java" на данный момент, но это было мое первоначальное намерение.
В Java,
if ( i != 0 )
- это идиоматический способ проверить, отличается ли целое число i
от zero
.
Если i
используется как флаг, он должен иметь тип boolean
, а не тип int
.
Почему бы не использовать тип boolean
? Это будет работать так, как вы ожидаете, без потенциально проблематичного целочисленного/булевского объединения.
private boolean isValid;
...
if (!isValid) {
...
}
Обратите внимание, что это идиоматический подход Java. Сторонние библиотеки используют это, и потребители вашего API будут использовать и ожидать этого. Я бы ожидал, что вы используете libs, чтобы дать вам booleans
, и поэтому вы просто рассматриваете ints
как booleans
.
FROM JLS:
Булевский тип имеет два значения, представленные булевыми литералами true и false, сформированный из букв ASCII.
Таким образом, нет ответа. единственное было
if ( i != 0 )
В Java условие должно иметь тип boolean, иначе оно не может быть выражением, поэтому
if( i )
не допускается.
Это должно быть либо верно, либо ложно.
Попробуйте BooleanUtils из Apache common-lang.
BooleanUtils.toBoolean(0) = Boolean.FALSE
BooleanUtils.toBoolean(1) = Boolean.TRUE
BooleanUtils.toBoolean(2) = Boolean.TRUE
Вы можете попробовать что-то подобное. Boolean я = true; Если я) System.out.println( "i истинно" );
Просто инициализируйте его как логическое значение, а не целое число.
Если вы настаиваете на использовании int вместо boolean, просто используйте метод для преобразования
class BooleanHelper
{
public static boolean toBoolean (int pVal) {
return pVal != 0;
}
...
}
// apply
if (BooleanHelper.toBoolean(i)) { // BooleanHelper could be avoided using static imports...
Однако просто используйте
if (i != 0) {
все еще короче и яснее.
Вероятно, что-то вроде этого:
int я == 0? false: true;
или наоборот:
int я == 1? true: false
...