Важность () в Boolean + String для Println - PullRequest
0 голосов
/ 15 мая 2018

Я искал пару деталей о том, как Java обрабатывает хранение строк и функцию println (), и в конце концов я создал это:

String s = "Oh No!";
String t = s;
System.out.println("t == s?" + t == s);
System.out.println(t == s);

На консоли напечатано:

false
true

Я ожидал, что условие будет истинным, потому что два объекта явно ссылаются на одну и ту же область памяти.Но не только println игнорирует "t == s?"строка;похоже, что для преобразования логического значения в ложь!Естественно, когда я помещаю круглые скобки вокруг логического значения (t == s) для первого println, отображение выглядит так, как ожидалось:

t == s?true
true

Мой вопрос: почему отсутствие круглых скобок вокруг первого логического выражения нетолько print false, но также заставляет println игнорировать «t == s?»

Это просто необычно и не поддается моему пониманию Java (которое я бы сказал, немного выше уровня AP в качестве эталона).

1 Ответ

0 голосов
/ 15 мая 2018

Порядок операций имеет значение, здесь

System.out.println("t == s?" + t == s);

эквивалентно

System.out.println(("t == s?" + t) == s);

вы добавляете t к String перед сравнением. Вы ожидали

System.out.println("t == s?" + (t == s));

Вы также можете использовать форматированный io для обеспечения порядка операций (и устранения неявного StringBuilder). Как,

System.out.printf("t == s?%b%n", t == s);
...