Questao do Inquisition...helpppp!

8 respostas
S
public class Test {
    

    public static void main(String[] args) {
        Character c11 = '\u00FF';
        Character c12 = '\u00FF';
        System.out.println("c11 == c12 : " + (c11 == c12));

    }


}

pq o resultado é c11 == c12 : false ?????

8 Respostas

ricardo13

olá,

É false devido ao msm post q vc escreveu.
Character é objeto … e vc naum compara valores com == … só com equals().

Com == vc compara referência.

Ricardo

S

vlwww entendi!

B

Fazendo uma analogia com sua outra dúvida sobre igualdades de referências, deve-se saber que um Character não se comporta como um Integer por exemplo, quando instancia-se um objeto dessa classe sem usar seu construtor.

No caso do Character, sempre 2 objetos distintos serão criado no heap.

Lavieri

é falso pq esta fora do range de 127 ....

por conveniencia o JVM guarda um pool de objetos iguais, que vai geralmente ate o elemento 127 do objeto... por exemplo

public class NewClass {
    public static void main(String ... args) {
        Integer num = 127;
        Integer num2 = 127;
        System.out.println(num + " " + (num == num2)); //imprime "127 true"

        num = 128;
        num2 = 128;
        //passou de 128 da false
        System.out.println(num + " " + (num == num2)); //imprime "128 false"
    }

o mesmo ocorre com caracter... esse caracter é o 255 então, não da igual

public static void main(String ... args) {
        Character num = 127;
        Character num2 = 127;
        System.out.println(num + " " + (num == num2)); //imprime " true"

        num = 128;
        num2 = 128;
        //passou de 128 da false
        System.out.println(num + " " + (num == num2)); //imprime "? false"

        Character c12 = '\u00FF';
        System.out.println(c12.charValue() + " " + (int)c12.charValue()); //imprime "ÿ 255"
    }

vc não precisa decorar quais caracters são acima ou abaixo de 127 ... normalmente vai dar false, exceto c ele falar em que range de caracter se encontra

S
public class Test {
    

    public static void main(String[] args) {
        Character c1 = '\u0000';
        Character c2 = '\u0000';
        System.out.println("c1 == c2 : " + (c1 == c2));

    }


}

porém se eu mudar o código.... a resposta deste é c1 == c2 : true

agora que eu nao entendi nd!

Lavieri

brrodo:
Fazendo uma analogia com sua outra dúvida sobre igualdades de referências, deve-se saber que um Character não se comporta como um Integer por exemplo, quando instancia-se um objeto dessa classe sem usar seu construtor.

No caso do Character, sempre 2 objetos distintos serão criado no heap.

isso não é verdade, se comporta sim igual a integer… ate 127, serão objetos iguais, depois de 127 objetos distintos… conforme exemplo acima

Lavieri
soublade:
public class Test {
    

    public static void main(String[] args) {
        Character c1 = '\u0000';
        Character c2 = '\u0000';
        System.out.println("c1 == c2 : " + (c1 == c2));

    }


}

porém se eu mudar o código.... a resposta deste é c1 == c2 : true

agora que eu nao entendi nd!


veja o meu post, acima deste seu que vc vai entender.... o caracter '\u0000' é o caracter 0... então ele esta entre 0 e 127 e assim vai dar igual... so apos o caracter 128 que começa a dar diferentes os objetos literais

B
Lavieri:
soublade:
public class Test {
    

    public static void main(String[] args) {
        Character c1 = '\u0000';
        Character c2 = '\u0000';
        System.out.println("c1 == c2 : " + (c1 == c2));

    }


}

porém se eu mudar o código.... a resposta deste é c1 == c2 : true

agora que eu nao entendi nd!


veja o meu post, acima deste seu que vc vai entender.... o caracter '\u0000' é o caracter 0... então ele esta entre 0 e 127 e assim vai dar igual... so apos o caracter 128 que começa a dar diferentes os objetos literais

É verdade Lavieri, não me atentei ao valor q elas recebiam.

É isso msm.

Criado 15 de maio de 2009
Ultima resposta 15 de mai. de 2009
Respostas 8
Participantes 4