Как правильно сравнивать строки в Java?​

Так как оператор «==» сравнивает на идентичность только примитивы и ссылки на объект, в java для сравнения строк используется метод equals(), наследуемый от класса Object и реализованный в классе java.lang.String. Метод сравнивает строку, на которой он вызван, со строкой, которую в него передали и возвращает true или false.

Выводом вышеуказанного кода будет сначала false, затем true.


Комментарии:

Как правильно сравнивать строки в Java?​: 3 комментария

  1. Любопытно, что если создавать строки не через new, а просто присвоить им одинаковые значения, то они будут ссылаться на один объект
    String str1 = "myString";
    String str2 = "myString"; System.out.println(str1==str2);

    результат будет true. Не знаю зачем так, но все таки) Мб кто объяснит… Банальная экономия памяти может?

  2. Всё верно. Ведь в Java строки, в зависимости от способа их создания, могут помещаться в пул или просто сваливаться в кучу. При создании используя кавычки, строки помещаются в пул и перед созданием проверяется, не было ли ранее такой строки уже в нём? Если она там есть, то просто возвращается ссылка на неё. От сюда мы получаем ссылки на один и тот же объект. И да, это экономия памяти. Стоит помнить, что строки в Java финализированы, а это значит что ссылка на один объект строки из разных мест нам ничем не грозит.
    String s1 = "hello";
    String s2 = "hello";
    System.out.println(s1==s2);
    s1+=", friend!";
    System.out.println(s1==s2);
    System.out.println("s1: " + s1);
    System.out.println("s2: " + s2);

    Вывод:
    true
    false
    s1: hello, friend!
    s2: hello

  3. То есть при любом изменении создается новая строка, как я понял, а старая висит в памяти пока ее мусорщик не почистит? Хреновато, когда у тебя цикл на over9000 итераций, в котором строками манипулируют

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *