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

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

...
    String str1 = new String("myString");
    String str2 = new String("MyString");
    System.out.println(str1.equals(str2));
    str2 = new String("myString");
    System.out.println(str1.equals(str2));
...

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

Понравилась статья? Поделиться с друзьями:

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

Комментарии: 3
  1. Денис

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

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

  2. PikselNsk (автор)

    Всё верно. Ведь в 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 итераций, в котором строками манипулируют

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: