A Classe String =============== Fonte: http://www.mycgiserver.com/servlet/delacerda.CertificacaoTopicoNove
-------------------------------------------------------------------------------- Em Java você tem duas classes para encapsular string de characters chamadas String e StringBuffer. Se você cria uma instância de classe String , não existe maneira de mudar o valor encapsulado i.e. chamado imutabilidade, então strings são imutáveis. Construindo Strings: String s = "Testing String"; String s1 = new String("Testing String"); A diferença entre as duas formas de construção string é que , o lugar onde estas strings são disponíveis. String s = "Testing String"; Qaundo você cria o objeto String no formato abaixo então o objeto String está disponível dentro do pool de string literals. Se a mesma string já existe no pool de strings então a antiga string vai ser substituida pela nova. String s1 = new String("Testing String"); Quando você constroi a String chamando a palavra chave new então o objeto String vai ser criado em tempo de execução e não vai existir no pool de strings. Para colocar esta string encapsulada dentro do pool chame o método intern() . Testando String Equality Exemplo: String s = "Testing String"; String s1 = new String("Testing String"); Para testar s e s1 use o método equals() s.equals(s1); Se você não conhece quando os dois tipos referenciados pertencem ao mesmo objeto ou objetos diferentes e você realmente não quer saber , então utilize o método equals() . Exemplo: String s = "Testing String "; String s1 = "Testing String"; Se duas referencias referem para o mesmo objeto então use == . Para testar s e s1 use == s = s1; Existem alguns métodos da classe String que podem ser interessantes. Métodos da Classe String: concat() equals() equalsIgnoreCase() length() substring() toLowerCase() toUpperCase() trim() Exemplo: public class TestString { public static void main(String args[]) { String s = "Hello"; String s1 = " how"; s1.append("is going"); String s2 = s.concat(s1.concat(" are you")); String s3 = "hello"; if (s3.equalsIgnoreCase(s)) System.out.println(s2); } } Saída: Hello how are you Aqui o método append() não é um métod da classe String mas mesmo assim ele compila e dá a você a saída abaixo. Cuidado sobre este tipo de exemplos , você pode ter questões como estas no seu exame real. -------------------------------------------------------------------------------- Algumas vezes no exame real você pode esperar questões comparando dois construtores de strings com classes String e StringBuffer . StringBuffer Class: Os construtores de strings com esta classe podem ser modificados. Exemplo: public class TestBString { public static void main(String args[]) { StringBuffer s = new StringBuffer("Hello"); String s1 = "Hello"; if (s1.equals(s)) System.out.println(s); } } O exemplo acima escreve nada na saída do console. Alguns métodos da classe StringBuffer: Métodos StringBuffer : append() insert() reverse() setCharAt() setLength() -------------------------------------------------------------------------------------------------------------------------------- Fonte: http://www.mycgiserver.com/servlet/delacerda.CertificacaoTopicoNove Eliseu Pfaffenseller Analista de Sistemas Senior -------------------------------------------------------------------------------------------------------------------------------- -----Original Message----- From: Alexandro Strack [mailto:[EMAIL PROTECTED] Sent: 02 June, 2003 16:06 To: [EMAIL PROTECTED] Subject: Re: [java-list] Dúvida cruel Caro Rodrigo, Se você já sabe da imutabilidade das Strings então só lhe falta o fato da passagem de parâmetros der por valor e não por referência. Ah, só mais um detalhe, a variável y não está vazia mais sim com o conteúdo "teste- ". Um abraço, Alexandro Strack ----- Original Message ----- From: "Rodrigo Alvares de Souza" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, May 30, 2003 10:31 AM Subject: [java-list] Dúvida cruel Alguem saberia me dizer pq qdo eu imprimo a variavel y, ela está vazia ? Eu sei que tem a ver com a imutabilidade das Strings, mas queria uma resposta que me convencesse.... :-) public class teste1 { public teste1() { } public static void main(String[] args) { teste1 t = new teste1(); String y = new String("teste - "); int z = 10; System.out.println(t.x(y,z)); System.out.println(y); } private String x (String str1,int z) { str1 = str1.concat(" ok xxxxxxxxxxxx") ; z = 2003; return str1; } } Obrigado. Atenciosamente, Paulo Henrique C. Zanchettin Scopus Tecnologia S/A ( 55-11-3909-3561 * [EMAIL PROTECTED] ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usurios Java da Sucesu-SP d vidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] ------------------------------------------------------------------------- ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usurios Java da Sucesu-SP dvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------