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 …
help
public class Teste {
public static void main(String[] args) {
String cnpjRegistro1 ="04780793000160 ";
String cnpjEmpresaLogada1 = "004780793000160 ";
BigInteger cnpjRegistro = new BigInteger(cnpjRegistro1.trim());
System.out.println(cnpjRegistro);
BigInteger cnpjEmpresaLogada = new BigInteger(cnpjEmpresaLogada1.trim());
System.out.println(cnpjEmpresaLogada );
if (cnpjRegistro==( cnpjEmpresaLogada)) {
System.out.println("Igual");
}else{
System.out.println("Diferente");
}
}
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?
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.
public static void main(String[] args) {
Integer i = 10;
Integer i2 = new Integer(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.
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 !
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???
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.
[quote=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.[/quote]
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.