Imutabilidade
Quando um objeto String é criado, não é permitido alterá-lo. Não pode ser maior ou menor, e você não pode alterar um dos caracteres dentro dele.
Você pode pensar em uma string como uma caixa de armazenamento que você tem perfeitamente cheio e cujos lados não podem ter protuberância. Não há como adicionar objetos, nem você pode substituir objetos sem mudar o arranjo inteiro. O trade-off para a embalagem ideal é a flexibilidade zero.
Mutável é outra palavra para mudar. Imutável é o oposto - um objeto que não pode ser alterado depois de criado. No exame OCA, você precisa saber que String é imutável.
Mais sobre imutabilidade
Você não será solicitado para identificar se as classes personalizadas são imutáveis no exame, mas é útil ver um exemplo. Considere o seguinte código:
class Mutable {
private String s;
public void setS(String newS){ s = newS; } // Setter makes it mutable
public String getS() { return s; }
}
final class Immutable {
private String s = "name";
public String getS() { return s; }
}
Imutável só tem um getter. Não há como alterar o valor de s depois de definido.
Mutable tem um setter também. Isso permite que a referência s mude para apontar para um String depois. Note que mesmo que a classe String seja imutável, ela ainda pode ser usada em uma classe mutável. Você pode até mesmo tornar a variável de instância final para que o compilador te lembre caso você acidentalmente mudar s .
Além disso, as classes imutáveis em Java são final e as subclasses não podem adicionar comportamento mutável.
Você aprendeu que + é usado para fazer concatenação de strings em Java. Tem outro jeito que não é muito usado em projetos reais, mas é ótimo para enganar as pessoas no exame. o que isso imprime?
String s1 = "1";
String s2 = s1.concat("2");
s2.concat("3");
System.out.println(s2);
Você disse "12" ? Boa. O truque é ver se você esquece que a classe String é imutável jogando um método em você.