A Classe String
No Java, String é um objeto representado como uma sequência de caracteres. Manipular “cadeias” de caracteres é um aspecto fundamental da maioria das linguagens de programação. A implementação de strings como objetos internos permite que o Java forneça um complemento completo de recursos que tornam conveniente o manuseio de strings. Por exemplo, Java possui métodos para comparar duas cadeias, procurar uma subsequência, concatenar duas cadeias e alterar o caso das letras em uma cadeia. A classe String possui 11 construtores e mais de 40 métodos utilitários. Objetos de sequência são meios imutáveis. Após a criação de um objeto, não é possível alterar os caracteres que compõem essa sequência. Isso não é uma limitação da classe String, mas será muito útil em um aplicativo multithread. Você pode executar toda a operação em seu objeto String, apenas as coisas alteradas, se um novo objeto String for criado a cada vez. Essa abordagem é usada porque cadeias fixas e imutáveis podem ser implementadas com mais eficiência do que as variáveis.
Em Java, strings são objetos. Assim como outros objetos, você pode criar uma instância de uma String com a nova palavra-chave, da seguinte maneira:
Passo 1
Essa linha de código cria um objeto da classe String e o atribui ao nome da variável de referência. Existem algumas diferenças vitais entre essas opções que discutiremos mais adiante, mas o que elas têm em comum é que ambas criam um novo objeto String, com o valor “Abel”, e o atribuem a um nome de variável de referência. Agora, digamos que você queira uma segunda referência ao objeto String referido por s, e estamos chamando o método concat no nome do objeto, isso criará um novo objeto String com o valor “Abel”, enquanto a referência s2 ainda aponta para o objeto “Abel ”.
Passo 2
Passo 3
Vamos entender esse conceito graficamente,
Etapa 1 e Etapa 2

Etapa 3

Como sabemos que as cadeias nos objetos do tipo String são imutáveis, significa que o conteúdo da instância da String não pode ser alterado após a criação. No entanto, uma variável declarada como referência de String pode ser alterada para apontar para outro objeto String a qualquer momento.
Como vimos anteriormente, o objeto String pode ser criado usando o construtor, usando uma nova palavra-chave, assim como podemos usar literais String. Há uma diferença fundamental entre os dois modos de criação de String. Vamos entender isso com a ajuda do programa Java. Estamos criando dois objetos String usando literais e dois objetos chamando o construtor da classe String. Estamos comparando objetos String usando o operador ==.
