Почему «==» создает разные ответы для String? [Дубликат]

Да, можно читать & amp; писать файлы, используя HTML5 + JS.

Ссылка, чтобы вы начали - Изучение API файловой системы

Я также написал статью некоторое время назад для SpeckyBoy на том же тема, которую вы можете найти полезной - http://speckyboy.com/2012/10/30/getting-to-grips-with-the-html5-file-api-2/

16
задан arshajii 14 August 2013 в 19:20
поделиться

3 ответа

Вам не хватает набора скобок:

System.out.println("Using == ::" + (s3==s4));

В вашей версии "Using == ::" + s3 сравнивается с == до s4, что вам не нравится.

В общем случае + имеет более высокий приоритет , чем ==, поэтому "Using == ::" + s3==s4 оценивается как ("Using == ::" + s3) == s4.

33
ответ дан arshajii 15 August 2018 в 17:13
поделиться
  • 1
    ("Using == ::" + s3) == s4 – Tom 14 August 2013 в 18:15
  • 2
    Интересный поворот по обычным .equals вопросам. +1 – Kevin DiTraglia 14 August 2013 в 18:16
  • 3
    Затем он должен печатать "false" и не «Use = :: false». Нет? – Lee Meador 14 August 2013 в 18:20
  • 4
    @LeeMeador На самом деле выполняет печать только false; выход OP не соответствует его коду. – arshajii 14 August 2013 в 18:21
  • 5
    @LeeMeador Запустите свой код, вы можете убедиться сами. – arshajii 14 August 2013 в 18:25

Вы используете этот код:

System.out.println("Using == ::"+ s3==s4);

Который оценивается как:

System.out.println( ("Using == ::" + s3) == s4);

Следовательно, вы получаете false как вывод.

Причина в том, что согласно приоритету оператора + выше == в соответствии с этой таблицей Operator Precedence: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

Как и другие ответы, вам нужно использовать скобки, содержащие ваше булево выражение:

System.out.println("Using == ::" + (s3==s4));
13
ответ дан anubhava 15 August 2018 в 17:13
поделиться
  • 1
    Это лучшее объяснение why , результат - это то, что есть, но было бы лучше с объяснением того, как его исправить. – Michelle 14 August 2013 в 18:18
  • 2
    @Michelle: IMO Сначала мне нужно объяснить, почему OP ошибается, тогда мой ответ будет лучше понят. Теперь Pls проверит редактирование. – anubhava 14 August 2013 в 18:19
  • 3
    +1 Для обозначения приоритета и ссылки на документы. – Michelle 14 August 2013 в 18:22

Строка правильная:

"Using == ::"+s3 не соответствует s4

Вам нужно будет изменить свой код:

"Using == ::"+(s3==s4)

edit: Вывод кода выдачи:

Using Equals Method::false
Using Equals Method::true
false
javaDirectly printing the s2 value which is autocasted from superclass to string subclass 
Directly printing the s1 value which is autocasted from superclass to string subclass javaDeveloper
Shantanu
5
ответ дан Christian Kuetbach 15 August 2018 в 17:13
поделиться
  • 1
    Итак, строка конкатенации имеет более высокий приоритет, чем оператор сравнения? Плюс ... зачем печатать литеральную строку, если она просто сравнивает ее? – Lee Meador 14 August 2013 в 18:16
  • 2
    В соответствии с этим - docs.oracle.com/javase/tutorial/java/nutsandbolts/… у него есть. – Betlista 14 August 2013 в 18:18
  • 3
    Затем он должен печатать "false" и не «Использование = :: false». – Lee Meador 14 August 2013 в 18:20
  • 4
    Результат в вопросе неверен. Я запускаю выделенный код и получаю ожидаемый результат (добавленный к моему ответу). – Christian Kuetbach 14 August 2013 в 18:34
Другие вопросы по тегам:

Похожие вопросы: