Problemas do alem com conversao simples

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");
		}
	}

Oi!

Evite usar o “==” para comparação de Objetos.
Use o equals().

Abraços.

ah mais ai ele ta comparado a string… e nao o inteiroo… quero comparar o inteiro… tenicamente deveriam ser iguais não ?

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

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? :slight_smile:

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 !

Por que eles não estão apontando para o mesmo endereço de memória.

Os valores são os mesmos, mas eles referenciam objetos diferente, por isso retornou false.
Utilize “equals”.

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.