Проверка "логического" результата типа "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" на данный момент, но это было мое первоначальное намерение.

Ответ 1

В Java,

if ( i != 0 )

- это идиоматический способ проверить, отличается ли целое число i от zero.

Если i используется как флаг, он должен иметь тип boolean, а не тип int.

Ответ 2

Почему бы не использовать тип boolean? Это будет работать так, как вы ожидаете, без потенциально проблематичного целочисленного/булевского объединения.

private boolean isValid;
...
if (!isValid) {
   ...
}

Обратите внимание, что это идиоматический подход Java. Сторонние библиотеки используют это, и потребители вашего API будут использовать и ожидать этого. Я бы ожидал, что вы используете libs, чтобы дать вам booleans, и поэтому вы просто рассматриваете ints как booleans.

Ответ 3

FROM JLS:

Булевский тип имеет два значения, представленные булевыми литералами true и false, сформированный из букв ASCII.

Таким образом, нет ответа. единственное было

if ( i != 0 )

Ответ 4

В Java условие должно иметь тип boolean, иначе оно не может быть выражением, поэтому

if( i ) 

не допускается.

Это должно быть либо верно, либо ложно.

Ответ 5

Попробуйте BooleanUtils из Apache common-lang.

  BooleanUtils.toBoolean(0) = Boolean.FALSE
  BooleanUtils.toBoolean(1) = Boolean.TRUE
  BooleanUtils.toBoolean(2) = Boolean.TRUE

Ответ 6

Вы можете попробовать что-то подобное.   Boolean я = true;   Если я)       System.out.println( "i истинно" );

Просто инициализируйте его как логическое значение, а не целое число.

Ответ 7

Если вы настаиваете на использовании 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) {

все еще короче и яснее.

Ответ 8

Вероятно, что-то вроде этого:

int я == 0? false: true;

или наоборот:

int я == 1? true: false

...