Почему программа не печатает true во второй и третьей строке?

Исходный код:

public class TestSB{
    public static void main(String args[]){
        String s1="Arnold";
        StringBuffer sb1=new StringBuffer("Arnold");
        StringBuffer sb2=new StringBuffer("Arnold");
        System.out.println(sb1==sb2);
        System.out.println(sb1.equals(sb2)); //should be true but printing false
       System.out.println(sb1.equals(s1)); //should be true but printing false
    }
}

Выше приведен исходный код, который я написал, вывод для строки 7 и строки 8 должен быть истинным, но он становится ложным, в чем причина этого?

Выход:

false
false
false

person smaltamash    schedule 27.06.2019    source источник
comment
Пройдите тур и прочитайте документацию в Справочном центре. В частности, вы должны прочитать о том, как задать хороший вопрос и какие вопросы бывают по теме здесь, в SO.   -  person azurefrog    schedule 27.06.2019
comment
comment
Если у вас есть проблемы с форматированием кода, у SO есть страница справки по уценке, которая может вам помочь.   -  person azurefrog    schedule 27.06.2019
comment
Когда объект StringBuffer передается, ссылки сравниваются, потому что StringBuffer не переопределяет метод equals класса Object.   -  person Nongthonbam Tonthoi    schedule 27.06.2019
comment
Почему это должно быть true? Вы предполагаете, что StringBuffer это то же самое, что и String? Вы проверили документы для StringBuffer, чтобы увидеть, что equals он реализует? И все остальные комментарии: вопросы должны стоять сами по себе, а ссылки на изображения текста хуже только изображений текста: текст поста.   -  person Dave Newton    schedule 27.06.2019


Ответы (1)


Это потому, что StringBuffer / StringBuilder не переопределяют Object#equals, как вы могли ожидать. Вы должны использовать sb1.toString().equals(sb2.toString()) или sb1.toString().equals(str) для сравнения SB со значением String.

person Dmitriy Popov    schedule 27.06.2019