Ответ 1
String - это объект, он не является примитивным типом, а всего лишь массив символов. Причина, по которой примитивные типы существуют в Java вообще, интересна, выдержка из интервью Джеймса Гослинга:
Bill Venners: Почему существует примитивный типы в Java? Почему не все просто объект?
Джеймс Гослинг: Полностью эффективность вещь. Есть все виды людей которые создали системы, в которых это все объекты. Есть различные способы сделать это, и все у них есть довольно серьезные проблемы. Некоторые из них просто медленны, потому что они выделяют память для все. Некоторые из них пытаются сделать объекты, где иногда они объектов, иногда они не являются ( это стандартная система LISP), и тогда все становится действительно странным. Это вроде работ, но это странно.
Просто делайте это так, что есть примитив и объекты, и они просто разные. Вы решаете множество проблем.
Таким образом, примитивные типы существуют по соображениям эффективности.