Конструктор StringBuilder принимает объект StringBuilder - почему?
Класс StringBuilder
определяет четыре конструктора, и ни один из них не принимает StringBuilder
, но следующие компиляции:
StringBuilder sb = new StringBuilder(new StringBuilder("Hello"));
Означает ли это, что анонимный объект StringBuilder
каким-то образом преобразуется в String внутри компилятора?
Ответы
Ответ 1
A StringBuilder
- CharSequence
(он реализует этот интерфейс) и существует конструктор с CharSequence
. Вот почему данный код компилируется:
StringBuilder sb = new StringBuilder(new StringBuilder("Hello"));
Что делает этот конструктор, просто инициализируйте новый StringBuilder
с содержимым данного CharSequence
. Результат будет таким же, как
StringBuilder sb = new StringBuilder("Hello");
Ответ 2
Существует конструктор, который принимает CharSequence
, который является интерфейсом, который реализуется StringBuilder и String (среди других классов).
http://docs.oracle.com/javase/8/docs/api/java/lang/CharSequence.html