Может кто-нибудь объяснить мне, почему это можно сделать:
String s = "foo";
как это возможно без перегрузки оператора (в этом случае "=")
Я из C ++, поэтому это объясняет ...
В этом случае перегрузка отсутствует. Часть java, которая отличается от C ++, - это определение "" - компилятор java преобразует что-либо в "" в java.lang.string, и поэтому это простое назначение в вашем примере. В C ++ компилятор преобразует "" в char const * и поэтому должен иметь преобразование из char const * в std :: string.
присваивает простой литерал типа String s
s
В Java Строки являются неизменяемыми, если вам нужно определить постоянное значение, вы должны использовать ключевое слово final.
final
API говорит: :
"Строки являются постоянными; их значения не могут быть изменены после их создания. Строковые буферы поддерживают изменяемые строки. Поскольку объекты String являются неизменяемыми, они могут использоваться совместно. Например:
String str = "abc";
"эквивалентно:
char data[] = {'a', 'b', 'c'}; String str = new String(data);
Это оператор присваивания в Java, который используется для присваивания значения объявленному типу, где перегрузка оператора не требуется. Даже в с ++