Что означает "Условные выражения могут быть только логическими, а не целыми". имею в виду?

Что означает "Условные выражения могут быть только логическими, а не целыми". имею в виду? Я не знаю Java, и я знаю, что C++ явно недостаточно для понимания того, что это значит. Пожалуйста, помогите (см. http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html в разделе Сравнение C++ и Java). 7 подпункт 1)

9 ответов

Решение

Условные выражения используются условными структурами и структурами управления циклами для определения потока управления программой.

// conditional control structure
if (conditionalExpression) {
    codeThatRunsIfConditionalExpressionIsTrue();
} else {
    codeThatRunsIfConditionalExpressionIsFalse();
}

// basic loop control structure
while (conditionalExpression) {
    codeThatRunsUntilConditionalExpressionIsFalse();
}

// run-at-least-once loop control structure
do {
    codeThatRunsAtLeastOnceUntilConditionalExpressionIsFalse();
} while (conditionalExpression);

С логической точки зрения условные выражения по своей природе являются логическими (истина или ложь). Однако некоторые языки, такие как C и C++, позволяют использовать числовые выражения или даже указатели в качестве условных выражений. Когда в качестве условного выражения используется не булево выражение, они неявно преобразуются в сравнения с нулем. Например, вы можете написать:

if (numericalExpression) {
    // ...
}

И это будет означать это:

if (numericalExpression != 0) {
    // ...
}

Это позволяет получить краткий код, особенно в языках указателей, таких как C и C++, где тестирование на нулевые указатели довольно распространено. Однако, краткий код не обязательно делает его более понятным. В языках высокого уровня, таких как C# или Java, использование числовых выражений в качестве условных выражений недопустимо. Если вы хотите проверить, была ли ссылка на объект инициализирована, вы должны написать:

if (myObject != null) /* (myObject) alone not allowed */ {
    // ...
}

Аналогично, если вы хотите проверить, является ли числовое выражение нулевым, вы должны написать:

if (numericalExpression != 0) /* (numericalExpression) alone not allowed */ {
    // ...
}

Это означает, что вам нужно логическое значение для условного выражения, преобразование из целочисленного типа не будет неявным. Вместо if (x) вам нужно if (x != 0), так далее.

Бывший int который будет неявно преобразован в bool в C++ (через != 0), но последнее выражение дает логическое значение напрямую.

В C++ можно сказать if (someInt) что в основном эквивалентно if (someInt != 0), В Java только вторая форма является законной.

Возьмите утверждение:

if (a > b) {
    // Do stuff
}

"Условное выражение" a > b, В C++ вы можете делать такие вещи, как

int i = foo();
if (i) {
    // do stuff
}

Это связано с тем, что целые (целочисленные значения) обрабатываются как ложные, когда 0, и истинно в противном случае. Такие языки, как Java, не позволяют таким образом рассматривать целые числа как логические значения.

Это означает, что в Java булево значение "true" не взаимозаменяемо с целочисленным значением "1" (или, точнее, с любым ненулевым целым числом), а булево значение "false" не взаимозаменяемо с целым числом значение "0".

В C/C++ вы можете сделать

int i = 5;
if( i ) { ...}

В Java вы не можете, так как я должен быть логическим

Интегральное выражение:

int i = 5;
if(i) {
  //...
}

//In C/C++, if(i) gets implicitly converted to if(i != 0), Java doesn't do this for you.

Логическое выражение

int i = 5;
if(i==5) {
  //...
}

//This will work in Java

Другими словами: C/C++ не имеет реального логического типа, они просто используют целые числа. У Java они есть - и, кроме того, у них более строгая типизация, чем у C/C++.

Выражение - это код, который вычисляет значение. В обоих языках выражение имеет статический тип, который описывает тип значений, которые дает это выражение. Integral означает, что тип выражения является int.

Проще говоря, авторы подчеркивают, что каждое из следующего является допустимым кодом C++, но не допустимым кодом Java, потому что ifвыражение дает целое число:

if (32) {

}

if (2 * 17 - 33) {

}

int c;
if (c = 12) {

}
Другие вопросы по тегам