Сравнение строк неожиданный вывод - PullRequest
2 голосов
/ 01 февраля 2012

В приведенной ниже программе я получаю вывод как false . Но, как я понимаю, когда мы добавляем две временные ссылочные переменные, тогда результат попадает в постоянный пул, который не допускает дублирования должно быть получено вывод как true здесь, но мы получаем false как вывод . Может кто-нибудь объяснить мне причину этого?

package com.lara;

public class Man9 
{
    public static void main(String[] args) 
    {
        String s1 = "ja";
        String s2 = "va";
        String s3 = "ja".concat("va");
        String s4 = "java";
        System.out.println(s3==s4);
    }
}

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Ваше представление о конкатенации строк неверно.

Только строка константы интернируются по умолчанию. Теперь строковая константа не является просто строковым литералом - она ​​может включать в себя конкатенацию других констант с использованием оператора + , например

String x = "hello";
String y = "hel" + "lo";
// x == y, as the concatenation has been performed at compile-time

Но в вашем случае вы делаете вызов метода - и это не является частью того, что спецификация языка Java учитывает при определении константных строковых выражений.

См. раздел 15.28 JLS о том, что считается «константой».

1 голос
/ 02 февраля 2012

Вам нужно использовать s3.equals (s4), а не s3 == s4.

Тогда вы получите истинный результат.

См. Стенограмму ниже

C:\temp>java foo
false
true

C:\temp>type foo.java
public class foo
{
    public static void main(String[] args)
    {
        String s1 = "ja";
        String s2 = "va";
        String s3 = "ja".concat("va");
        String s4 = "java";
        System.out.println(s3==s4);
        System.out.println(s3.equals(s4));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...