1.12.5
String é um objeto, não um tipo primitivo
Em Java, String não é um tipo primitivo; ela é uma classe. Isso significa que valores do tipo String são objetos, armazenados no heap e manipulados por meio de referências, mesmo que a linguagem ofereça uma sintaxe conveniente para sua criação.
Exemplo conceitual
String text = "Hello";
Explicação linha a linha
String text = "Hello";
Declara uma variável do tipo String. Apesar da sintaxe simples, um objeto do tipo String é criado e armazenado no heap, e a variável text contém apenas uma referência para esse objeto.
Por ser um objeto, String possui métodos, pode ser passada como referência e segue as regras de memória aplicáveis a tipos de referência. Detalhes como imutabilidade e string pool serão abordados mais adiante.