Possível erro no livro da Kathy Sierra (SCJP)

certo…

acho q fiquei um cado bitolado…e confundi - como vc disse - variaveis de referencia com objetos…

[quote=pardal_nb]certo…

acho q fiquei um cado bitolado…e confundi - como vc disse - variaveis de referencia com objetos…[/quote]

Esse assunto realmente costuma gerar confusões… deve ser um dos prediletos dos elaboradores do exame. :-o

Fala galera blz. li o tópico e tbm fiquei com uma dúvida , olhando este código:

class CardBoard {

    public static void main(String[] args) {
        CardBoard c1 = new CardBoard();
        CardBoard c2 = new CardBoard();
        CardBoard c3 = null;
        CardBoard cb=c2; 
        System.out.println("Cb=" + cb);
        System.out.println("C2=" + c2);
        c1 = null;
        cb=null;
        System.out.println("Depois que cb recebe null");
        System.out.println("Cb=" + cb);
        System.out.println("C2=" + c2);
        System.out.println("C1=" + (c1==null));
        System.out.println("C2=" + (c2==null));
        System.out.println("C3= "+ (c3==null));
        System.out.println("Cb= "+ (cb==null));  
    }
}

A minha dúvida é a seguinte quando faço cb=c2, significa que cb aponta para o mesmo objeto que c2 certo?? Agora então quando atribui cb=null, e se eles estão apontando para o mesmo objeto, porque tbm o c2 nao ficou null??

Att

[quote=danielbussade]Fala galera blz. li o tópico e tbm fiquei com uma dúvida , olhando este código:

class CardBoard {

    public static void main(String[] args) {
        CardBoard c1 = new CardBoard();
        CardBoard c2 = new CardBoard();
        CardBoard c3 = null;
        CardBoard cb=c2; 
        System.out.println("Cb=" + cb);
        System.out.println("C2=" + c2);
        c1 = null;
        cb=null;
        System.out.println("Depois que cb recebe null");
        System.out.println("Cb=" + cb);
        System.out.println("C2=" + c2);
        System.out.println("C1=" + (c1==null));
        System.out.println("C2=" + (c2==null));
        System.out.println("C3= "+ (c3==null));
        System.out.println("Cb= "+ (cb==null));  
    }
}

A minha dúvida é a seguinte quando faço cb=c2, significa que cb aponta para o mesmo objeto que c2 certo?? Agora então quando atribui cb=null, e se eles estão apontando para o mesmo objeto, porque tbm o c2 nao ficou null??

Att[/quote]

O que vc fez foi anular a referência cb, o objeto ainda existe e continua sendo referenciado por c2, ou seja, vc tinha duas referências para um único objeto e anulou uma delas, a outra continua apontando para o objeto.

Exato. Pessoal, não podemos confundir referências com objetos! Apesar de serem termos relacionados, são distintos.

Qual livro é esse?
Use a cabeça java? Eu tenho e não consigui achar… aliás, achei alguns erros só no primeiro capítulo do livro…

[quote=dedejava]Qual livro é esse?
Use a cabeça java? Eu tenho e não consigui achar… aliás, achei alguns erros só no primeiro capítulo do livro…[/quote]

é o livro guia para a certificação da Kath e Bert

[quote=pardal_nb][quote=dedejava]Qual livro é esse?
Use a cabeça java? Eu tenho e não consigui achar… aliás, achei alguns erros só no primeiro capítulo do livro…[/quote]

é o livro guia para a certificação da Kath e Bert [/quote]

Complementando: SCJP versão 5

Errata da editora (pode ser visualizada através desse link):

Ou seja, o valor de CardBoard.story é 200, não 5. Com esse valor, a resposta C (2) é a correta.

Caso resolvido! :smiley:

Nossa… eu comprei o use a cabeça Java achando que era esse pra certificação :frowning:
Até estranhei por estar achando meio fácil demais o livro :frowning: