2013-09-01 3 views
0
class string1 { 
    static public void main(String[] ar) { 
     String s1 = "test"; 
     String s2 = new String(); 
     if(s2=null) { // line 0 
      System.out.println(s1); 
      System.out.println(s2.length()); //Line 1 
     } 
    } 
} 

Что я ожидал произойти былНазначение Операция Java

а) s2 будет установлен в нуль потому, что его операция присваивания, как я не использую ==

б) И я получаю NPE на линии 1 во время выполнения

и вместо этого я получил следующий выход, как показано ниже.

Выход

if(s2=null) 
    ^
    required: boolean 
    found: String 
1 error 

Может кто-нибудь объяснить, почему я получаю ошибку компиляции?

+0

Хотя я упомянул решение вашего вопроса от jls, но для более подробной информации прочитайте раздел 14.9.1 в jls, это даст лучшее понимание. – Prateek

+0

Умм, это странный вопрос. Почему бы вам просто не поменять значение s2 на null до инструкции if? –

ответ

5

Java не будет неявно бросить на логическое значение, как на некоторых языках. Вы должны положить выражение, которое вычисляет логическое внутри условно:

if ((s2 = null) != null) { } 

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

0

Вы должны сделать так:

if((s2 = null) != null) 
{ 
    // do stuff 
} 

Причина вы получаете эту ошибку, потому что вы должны explicitly поместить код для boolean evaluation в условиях Java doesn't implicitly cast it boolean.

0

Операция if-then выполняется при первой оценке выражения.

С, JLS - Глава 14: Блоки и отчеты

14.9.1. Оператор if-then

Оператор if-then выполняется, сначала оценивая выражение. Если результат имеет тип Boolean, он подвержен распаковке преобразования (§5.1.8).

Если оценка по выражению Expression или последующему распаковке (если таковая имеется) по какой-либо причине неожиданно завершается по ошибке, то инструкция if-then завершается внезапно по той же причине.

В противном случае, выполнение продолжается, делая выбор, основанный на результирующее значение:

Если значение верно, то содержащаяся заявление выполняется; Оператор if-then выполняется нормально, если и только если выполнение инструкции завершается нормально.

Если значение ложно, никаких дополнительных действий не предпринимается, и инструкция if-then завершается нормально.

0

Следует отметить тот факт, что в Java имеются только две логические значения: true и false в отличие от некоторых других языков, использующих 0 как ложь и все остальное, как верно.

Может кто-нибудь объяснить, почему я получаю ошибку компиляции?

В выражении if условие может быть либо истинным, либо ложным, которое возвращается операциями сравнения и булевыми переменными.

В,

if(s2=null) 

s2=null не оценивает любому логическое значение, то есть истина или ложь, следовательно, ошибки компилятора:

required: boolean 
    found: String 
0

Условие if оценивает только логические условия.

И оператор присваивания здесь не дает логического результата.

В этом причина получения исключения.

Если вы используете if ((s2 = null) != null) вместо if(s2=null), он будет работать.

0

Кроме того, что все остальные сказали, s2 будет never be null - вам просто присвоена новая строка! Вы уверены, что не используете тесты длины строк/существования на других языках?

Смежные вопросы