String imutavél

Olá,
sera que alguém poderia explicar o que é um objeto ser imutavél em Java, por exemplo um objeto do tipo String. Por exemplo a JVM não cria novos obejtos String com mesmo valor na mémoria correto. Mas o que siginifica ele ser imutavél?

Não entendi a duvida

mas se quer deixar o valor de uma variavel sempre a mesma declare

private static final String texto;

Um objeto é “imutável” quando a classe ao qual ele pertence não tem métodos que permitem a sua alteração.
Por exemplo, as classes java.lang.String, java.lang.Integer, java.lang.Double etc. não têm nenhum método que faça isso.
Um objeto é “mutável” quando a classe ao qual ele pertence tem algum método que permite a sua alteração.
Por exemplo, a classe java.util.Date tem vários métodos (setDate, setHours etc.) que permitem que você possa alterar o valor do Date.
Mas nunca confunda variáveis com objetos. Por exemplo,

String s = "string 1";
s = s.toUpperCase(); // toUpperCase cria um novo objeto String, contendo o valor da string original só que em maiúsculas.
System.out.println (s); // imprime "STRING 1"

Neste caso você sabe que as strings são imutáveis (OK) mas as variáveis podem receber novos objetos, portanto você
vai ver que a variável não é imutável, só o objeto em si.

Não, não está correto. Exemplo:

String s = new String ("José");
String t = new String ("José");

Neste caso temos 2 objetos String com o mesmo valor (“José”).
(A rigor, existem 3 aqui, que são a String que está no string pool e foi usada para chamar o construtor de String, e os outros 2 que são apontados pelas variáveis s e t.)

significa que depois que o objeto foi inicializado, ele nunca mais muda de valor. se vc precisar mudar o valor, vai ter que criar um novo objeto.

[code]

public class Ponto{

public Ponto(int x, int y){
this.x = x;
this.y = y;
}

public int getX(){
return x;
}

public int getY(){
return y;
}
…}[/code]

nesta classe ponto, se vc precisar mudar o valor do ponto, vai ter que criar outro, pq não tem métodos set, entendeu? ele é imutavel. naõ tem como mudar o valor de x ou y depois que o ponto foi criado.

A JVM não cria novos strings com o mesmo valor na memória pq ela usa um pool de objetos string. Esse pool não é pra todos os objetos do tipo string, só pra alguns casos.

http://imasters.uol.com.br/artigo/7131/java/entendendo_as_classes_string_stringbuilder_e_stringbuffer/

Leia esse excelente artigo do Brian Goetz sobre o assunto:

Ele explica o que são objetos imutáveis, como funcionam e seus pontos fortes e fracos.

Ok, valeu turma, compreendi e entendi tudo.