System.out.println(var2);//Let'sSurf In Rio var2.concat("Baby!");//alteramas nao passa o valor a referencia System.out.println(var2);//logoimprime valor: Let's Surf In Rio var2= var2.concat("!");//agorasim temos a referencia System.out.println(var2.toUpperCase());//naotemos refere var2.toUpperCase(); System.out.println(var2);//comoo valor nao atribuiu a variavel //nada ocorre Saida: InRioLet'sSurf In RioLet'sSurf In RioLET'SSURF IN RIO!Let'sSurf In Rio! Saberiame dizer quantos objetos foram criados no codigo acima?Entaoveja novamente e tente responder, depois continue a leitura: Comecamoscom a instanciacao do primeiro objeto e referenciando-o a var1,o mesmo ocorre de forma identica para a JVM durante a declaracaoe referenciacao a var2. Apos imprimir a variavel var2,temos na quarta linha algo um pouco diferente, estamos fazendo umajuncao dos valores de var1 e var2, criando assim umnovo objeto e atribuido este novo objeto a var2. Neste caso oobjeto antigo que referenciava a var2 ficara perdidoalterando tambem o valor de var2. Seguindoadiante no codigo, vemos que var2 chama o metodo concatda classe String mas, mesmo atibuindo o valor Baby! aometodo, este objeto criado nao e referenciado a variavel var2,desta forma o valor naosera atribuido a var2deixando nosso heap da seguinte forma: Emseguinda vemos uma nova chamada ao metodo concatmas desta vez alem da criacao de um novo objeto String com ocaracter de exclamacao no final da frase, e feita a referencia avariavel var2,e possivel confirmar chamando para imprimir novamente a variavel evemos seu resultado conforme esperado. Quantoas tres ultimas linhas, foram deixadas para demonstrar que o valordo texto e alterado com acriacao de um novo objeto, masnao referenciado a variavel, com isso chamamos duas vezes o metodotoUpperCaseuma dentro do printlne outra fora echamarmos novamente a impressao da variavel var2e vermos que ela nao foi alterada eque nosso codigo resultou na criacao de sete objetos confromeimagem abaixo pode achar estranho mas o motivo de terem sido criadasete e nao seis objetos String foi pelo metodo toUpperCaseda classe String ter sido chamado duas vezes: Emgeral se voce entendeu bem isto, tera entendido grande parte dacomplexidade da classe String so temos mais duas coisas aacrescentar que sao os unicos momentos em que um objetos String naoe criado:Ao referenciar uma variavel a outra assim como objetos;Ao atribuir um texto de forma literal um texto ja existente no heap de forma identica; Oprimeiro caso nao novidade por motivos de qualquer objeto ter omesmo comportamento isso quer dizer que: String var3 = "um";String var4 = var3;// referenciando a um mesmo objeto Jao segundo caso caso e por uma questao de economia de memoria feitapela propria JVM. Em caso de atribuir um texto de forma literal auma variavel, nao sera criado um novo objeto ex:Stringvar5= "LET'SSURF IN RIO";//jaexisteno heapStringvar6= "Let'ssurf in Rio Baby!";//jaexisteno heapStringvar7= "Let'ssurf in Rio";//jaexisteno heapStringvar8= "Let'ssurf in Rio";//jaexisteno heapStringvar9= newString("Let'ssurf in Rio");//a chamadadenew forcaa criacaodeumnovoobjetoStringvar10= var9.toLowerCase();//a chamadapormeiodeummetodo,fazcomquechamea palavrareservadanew MetodosString Aclasse String tem varios metodos que poderao serutilizados para facilitar seu dia-dia. Esempre valido acessar a documentacaoda oracle para saber detalhes da utilizacaodos metodos alem de ver exemplos. Ireimencionar aqui apenas os principais mas fique a vontade em pesquisarpor novos metodos.CharAt( ) - Ira retornar o character localizado no indice informado.String aux = "0123456789";System.out.println("aux.charAt(5) = "+aux.charAt(5));Saida: aux.charAt(5) = 5Concat()= Adiciona um texto literal ou por meio de variavel