Estou com um problema meio estranho galera fiz uma conversao normal de string para Big integer… os espaços na string sao pra simular um problema, logo gou o trim e esta resolvido… o zero a esquerda tbm quando converto para big interger ele remove o zero … porem estranhamente esse codigo tem como resultado… que os dois valores sao diferentes O.o … sendo que no sysout os dois parecem iguais… nao entendo pq nao cai no fluxo “correto” ja que os dois seriam iguais …
Evite usar o “==” para comparação de Objetos.
Use o equals().
Abraços.
juliocesarsrosa
ah mais ai ele ta comparado a string… e nao o inteiroo… quero comparar o inteiro… tenicamente deveriam ser iguais não ?
Quindin
Exatamente, procure sempre usar o equals… eu rodei seu codigo com o == e com o equals
com == ele da false
com equals() retorna true
troca ai para equal que vai rolar xD
E
entanglement
Você está comparando dois OBJETOS BigInteger. Para comparar 2 variáveis e ver se elas apontam para o mesmo objeto, use “==”. Para comparar 2 variáveis e ver se elas apontam para objetos com o mesmo valor (como é o seu caso), use “equals”. Equals não é só para strings, mas para quaisquer objetos cujas classes implementem corretamente o método equals (como é o caso de BigInteger). OK?
nel
Antes de mais nada, não duplique tópico, eu já estava lhe ajudando nesse aqui.
É continuação da sua dúvida, deveria ter continuado lá. Dê como resolvido o outro tópico ok?
Não.
publicstaticvoidmain(String[]args){Integeri=10;Integeri2=newInteger(10);if(i==i2){System.out.println("== e sao iguais...");}if(i.equals(i2)){System.out.println("Usando equals()...sao iguais...");}}
Aqui você tem um valor primitivo atribuido ao Integer e abaixo a instancia de um Objeto com um determinado valor.
Você está trabalhando com objetos, vide o new, ou seja, criou uma referência. Estais a comparar referência e não o conteúdo do objeto.
O código acima, qual o resultado que você acha que vai ser apresentado?
Use o equals() para objeto, conforme eu disse. Só tenha certeza de não haver referência nula para evitar uma exceção.
Abraços.
juliocesarsrosa
ok entendi … mas ainda ficou algo na minha cabeça … rodando este código… vcs viram que no sysout… os dois valores sao identicos… pq entao nao deu certo usando == ??? ja que os dois passaram a ser do tipo inteiro ??? grato !
Dan_xD
Por que eles não estão apontando para o mesmo endereço de memória.
C
carlospomari
Os valores são os mesmos, mas eles referenciam objetos diferente, por isso retornou false.
Utilize “equals”.
juliocesarsrosa
entao justamente isso ja entendi desculpa insistir… "Os valores são os mesmos, mas eles referenciam objetos diferente, por isso retornou false. " mas quando uso o “==” ele nao compara justamente os valores???
Dan_xD
Na verdade o “==” testa se dois objetos são idênticos. Ou seja, se ocupam o mesmo local na memória.
Já o “equals” vai testar o conteúdo.
Você pode estar confundindo com o fato de se usar muito “==” para comparações com primitivos.
Quando se utiliza comparações com não primitivos, você utiliza o “equals”, que serve para verificar o valor e não para ver se os objetos são identicos.
ViniciusLM
Dan xD:
Na verdade o “==” testa se dois objetos são idênticos. Ou seja, se ocupam o mesmo local na memória.
Já o “equals” vai testar o conteúdo.
Você pode estar confundindo com o fato de se usar muito “==” para comparações com primitivos.
Quando se utiliza comparações com não primitivos, você utiliza o “equals”, que serve para verificar o valor e não para ver se os objetos são identicos.
Acrescentando, para ver isso claramente debug o codigo e no valor das variaveis o valor das String serao "04780793000160 ", ja o valor do Long sera por exemplo #1122 que é onde esta alocado na memória entao quando vc usa == ele vai verificar assim (#1122 = #1133) entao retorna false, ja com o equals ele vai pegar o valor alocado em #1122 que é 4780793000160 e o valor alocado em #1133 que tambem é 4780793000160 e vai comparar esses valores e retorna true.