Я парень С++, изучающий Java. Я читаю "Эффективная Java", и что-то меня смутило. Он говорит, что никогда не писать такой код:
String s = new String("silly");
Потому что он создает ненужные объекты String
. Но вместо этого это должно быть написано так:
String s = "No longer silly";
Хорошо до сих пор... Однако, учитывая этот класс:
public final class CaseInsensitiveString {
private String s;
public CaseInsensitiveString(String s) {
if (s == null) {
throw new NullPointerException();
}
this.s = s;
}
:
:
}
CaseInsensitiveString cis = new CaseInsensitiveString("Polish");
String s = "polish";
-
Почему первое утверждение одобрено? Не должно быть
CaseInsensitiveString cis = "Polish";
-
Как заставить
CaseInsensitiveString
вести себя какString
, чтобы приведенный выше оператор был в порядке (с расширениемString
и без него)? Что это такое о String, которая позволяет ему просто передать это буквально? Насколько я понимаю, в Java нет концепции "конструктор экземпляров"?