Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Что вернёт метод? / 5 сообщений из 5, страница 1 из 1
01.06.2020, 08:13
    #39964884
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что вернёт метод?
Вопрос задаёт телезритель Груздь из села Нижнее Поддубово. Уважаемые знатоки, что вернёт метод и почему?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public int x() {
  boolean isFalse = false;
  Integer i1 = 1;
  String str = "x";
  if (str.equals("e") && !isFalse ? true : i1.equals(1)) return 1;
  return 0;
}
//openjdk version "1.8.0_222"
...
Рейтинг: 0 / 0
01.06.2020, 10:24
    #39964919
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что вернёт метод?
crutchmaster
Вопрос задаёт телезритель Груздь из села Нижнее Поддубово. Уважаемые знатоки, что вернёт метод и почему?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public int x() {
  boolean isFalse = false;
  Integer i1 = 1;
  String str = "x";
  if (str.equals("e") && !isFalse ? true : i1.equals(1)) return 1;
  return 0;
}
//openjdk version "1.8.0_222"



Будет 1.

Причина:
Из этого описания грамматики java видно, что в левой части тернарного оператора стоит не одиночный conditional, а их комбинация. Поэтому парсер считает все условие str.equals("e") && !isFalse частью тернарного оператора.

116. <conditional expression> ::= <conditional or expression>
| <conditional or expression> ? <expression> : <conditional expression >
117. <conditional or expression> ::= <conditional and expression>
| <conditional or expression> || <conditional and expression>
118. <conditional and expression> ::= <inclusive or expression>
| <conditional and expression> && <inclusive or expression>

P.S. Спасибо за вопрос, изначально я ответил неправильно
...
Рейтинг: 0 / 0
01.06.2020, 11:26
    #39964949
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что вернёт метод?
Здесь конечно не хватает скобочек. И да. Вопрос для собесов. Чтоб хорошо мАкнуть в грязь зазнавшихся джунов.

Но в продуктовом коде я-бы такое не пропустил. Просто - код неясен. И вызывает много WTF.
...
Рейтинг: 0 / 0
01.06.2020, 11:42
    #39964954
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что вернёт метод?
mayton,

Там надо было сделать вот так:
Код: java
1.
2.
3.
4.
if (str.equals("e") && 
     !isFalse ? true : i1.equals(1)) {
  return 1;
}


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

mayton
Но в продуктовом коде я-бы такое не пропустил. Просто - код неясен. И вызывает много WTF.

Оригинальное только условие, ну и там еще много цепочек getЭто().getТо().getТретье()
...
Рейтинг: 0 / 0
01.06.2020, 11:45
    #39964956
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что вернёт метод?
Lelouch
P.S. Спасибо за вопрос, изначально я ответил неправильно

Вот я тоже мимо глаз пропустил, но там еще условия были на разных строчках.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Что вернёт метод? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]