Vou fazer um exemplo completo com impressão dos vetores pra vc. Mas voltando à pergunta: String são imutáveis. Como pode ser isso?
Você não consegue ALTERAR o valor de uma String
, como faz com outro tipo de objeto. Isso foi uma decisão arquitetural dos engenheiros da linguagem, não tem um único motivo mas diversos, e é mais fácil você fazer uma busca sobre o assunto pra entender melhor essa motivação.
Bom, explicando o seu código de exemplo. A String nome
não imprimiu o esperado exatamente por causa dessa propriedade imutável.
public class TesteString {
public static void main(String[] args) {
String nome = "Thadeu de Russo e Carmo";
nome.toUpperCase();
System.out.println(nome);
}
}
Quando você quer alterar o valor de uma String
você deve atribuir um novo valor a ela, um novo objeto ao qual apontar. Por isso se você olhar na documentação da oracle vai reparar que todos os métodos que "alteram" o valor do objeto na verdade retornam outro objeto String
. Então você tem que atribuir esse retorno a uma nova variável ou à original. Exemplos:
public class TesteString {
public static void main(String[] args) {
String nome = "Thadeu de Russo e Carmo";
String nomeAlterado = nome.toUpperCase();
System.out.println(nomeAlterado);
nomeAlterado = nome.toLowerCase();
System.out.println(nomeAlterado);
nome = "Sr. " + nome.concat(", o estudante de Java");
System.out.println(nome);
}
}
Se você não atribuir o retorno ou utilizar imediatamente, ele se perde e sua operação foi em vão, como no exemplo que você mostrou. Isso é ótimo para alterações pontuais, e um ótimo exemplo é o nome.
Você pode por exemplo adicionar um pronome de tratamento só no momento de impressão na tela, sem alterar o valor da variável. Pode transformar tudo em maiúsculas pra fazer comparação sem correr o risco de perder o valor original.
Deu pra entender?