Если условие в Яве - PullRequest
       2

Если условие в Яве

3 голосов
/ 12 июля 2011

If логика, приведенная ниже, хорошо работает на языке Си, но не работает в Java .... Почему .. ??
Выдает ошибку в Java при компиляции.

class test
  {
    public static void main(String[] args)
    {
    int i;
    if(i=4)
    System.out.println("hello");
    }
  }

Ответы [ 6 ]

7 голосов
/ 12 июля 2011

Вам нужно использовать оператор сравнения (==) вместо оператора присваивания (=) в вашем операторе if.

В C результат действительного оператора присваивания равензначение, которое присваивается .Если бы ваш пример был на C, результирующий код был бы эквивалентен if(4), который оценивается как истинное утверждение, и код всегда выполняется без каких-либо жалоб со стороны компилятора.Java проверяет несколько случаев, когда вы, вероятно, имеете в виду что-то еще, например этот.

4 голосов
/ 12 июля 2011

Я бы не согласился, что он хорошо работает в C. Это сбивает с толку, даже если он компилируется.

Это также напечатает "привет" в C

int i = 0;
if (i == 4) // i == 4 is not true
  cout << "hi";

if (i = 4) // i = 4 which is treated as true
  cout << "hello";

Именно поэтому это не разрешено в Java. Вы должны написать

int i = 0;
if (i == 4) // false
  System.out.println("hello");

Самая близкая к этому проблема - использование логического типа.

boolean b = false;
if (b = true)
  System.out.println("hello");

Это компилируется, но почти наверняка является ошибкой.

Обычно используется одно место для чтения строк текста

BufferedrReader br = 
String line;
// assigns and checks the value of readLine()
while((line = readLine()) != null) {

}
4 голосов
/ 12 июля 2011

В C / C ++ любое ненулевое значение считается истинным, ноль считается ложным. То есть int и bool взаимозаменяемы. Так что if (i = 4) верно в C / C ++. Поскольку i получает значение 4, и это эквивалентно if (4). Но в Java логическое значение отличается от int, и вы не можете использовать int там, где требуется логическое значение. Обратите внимание, что i == 4 является логическим значением, но i = 4 является int. Последнее одно задание, не сравнить.

1 голос
/ 12 июля 2011

Обратите внимание на двойной знак равенства ==

class test
  {
    public static void main(String[] args)
    {
    int i = 4;
    if(i==4)
    System.out.println("hello");
    }
  }
0 голосов
/ 12 июля 2011
if (i=4) {
}

будет работать в C, но не будет делать то, что вы ожидаете.Фактически он проверит, что я не равен 0.

Java заставляет вас иметь выражение, которое вычисляется как логическое значение.Следовательно, вам нужен оператор ==.Оператор присваивания в этом случае будет иметь значение int.

0 голосов
/ 12 июля 2011

Он будет компилироваться в C, потому что условие и оператор if в C может иметь тип int. Тем не менее, вы назначаете 4 для i в вашем состоянии, и оно не будет делать то, что вы ожидаете, что будет делать в C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...