Avatar 0 Denunciar post Postado Junho 26, 2009 Fala pessoal, sou eu mais uma vez. Eu estou estudando o Java por conta. Atualmente eu estou no capítulo 6 do SCJP (Caty Sierra...) e me deparei com a descrição de como funcionam as Strings em Java. Excelente, compreendi que para cada String é criado, no heap, um objeto e ele é ou não referênciado por uma variável de instância ou afim. Sei também que este objeto pode permanecer em um pool de strings... Isto tudo acontece "por debaixo dos panos", isto é, à nível de compilador. Então eu resolvi fazer um teste: public class Duvida { public static void main(String []args) { String a = "abcdef"; String b = a; System.out.println(b == a); b = "abcdef"; //linha comentada System.out.println(b == a); System.out.println(b.equals(a)); } }A saída deste código foi: true true true Na linha comentada (b = "abcdef";) - se eu substituir o comando por String b = "abcdef"; - a saída será: true false true Eu fiquei na dúvida, eu imaginei que seria igual para ambos, que teria sido criado um novo objeto quando eu fiz b = "abcdef"; - no entanto isto não aconteceu exatamente. Foi porque eles estão sendo referenciados para o mesmo lugar no pool? Ou estou fazendo a maior confusão? Desde já, grato pela atenção! Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Junho 29, 2009 Eu tentei simular o que voce disse e não consegui. Coloque os dois códigos completos por favor. Quando voce faz isso: String a = "abcdef"; Na verdade "abcdef" é criada no pool de strings e nenhum objeto no heap é criado. Compartilhar este post Link para o post Compartilhar em outros sites
Mnemønic 0 Denunciar post Postado Julho 3, 2009 Aqui também não consegui reproduzir isso. Nos dois casos recebi true true true Compartilhar este post Link para o post Compartilhar em outros sites
Avatar 0 Denunciar post Postado Julho 5, 2009 Desculpem-me distrair vocês. Não sei porque, mas agora que eu refiz os testes o resultado foi o previsto no início, tudo true. Sendo assim, o tópico pode ser removido, eu devo ter feito alguma coisa idiota no primeiro teste :) Valeu pela força Mnemonic e Kandrade! Compartilhar este post Link para o post Compartilhar em outros sites
Mnemønic 0 Denunciar post Postado Julho 5, 2009 Sem problemas! Esse é daqueles erros esotéricos que acontecem às vezes. Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Julho 10, 2009 De qualquer forma vou deixar aberto o tópico. Caso alguém queira continuar esse assunto que por sinal é bem interessante. Abraço! Compartilhar este post Link para o post Compartilhar em outros sites