Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Comparação de Variáveis

Pessoal bom dia, estou "apanhando de um código teóricamente simples em termos de comparação.

abaixo deixo o código ao qual me refiro.

A situação é bem simples, tenho uma classe 1 que após realizar alguns procedimentos, chama uma classe 2 para realizar outros a questão é:

ao entrar na Classe 2, é necessário verificar o valor recebido para poder executar procedimentos específicos.

Já tentei realizar essa verificação através de HARD CODDE (sei que não é o mais indicado nem o mais "limpo") já tentei realizar através de uma variável que eu inicio dentro da Classe 2 e nenhum dos procedimentos retornou True.

o código em questão é apenas ilustrativo para demonstrar as opções que já utilizei.

quanto ao print das variáveis, TODAS apresentam o mesmo valor.

Classe 1
            verificarValor verifica = new verificarValor();
            verifica.checaValor(dados.valor1(), dados.valor2());

Classe 2
public class verificarValor {

    public void checaValor(String Valor1, String Valor2) {

        String valor_classe = "XX";

        System.out.println(Valor1 == "XX");
        System.out.println(Valor1 == valor_classe);
        if (Valor1 == valor_classe) {
            System.out.println("Comparação funciona!!!");
        }
        if (Valor1 == "XX") {
            System.out.println("Comparação funciona!!!");
        }
        System.out.println("Valor1..: " + Valor1 + " Valor Classe..: " + valor_classe);

    }

}

obs.: Todas as variáveis utilizadas no processo estão declaradas como String através de uma outra classe a qual utilizo para declaração de variáveis, geters e seters.

Desde já agradeço pela ajuda.

4 respostas

Olá Andre,

desculpe, mas acho que não entendi muito bem qual é o objetivo/problema em questão. Fiz um teste com o código que passou:

checaValor("XX", "valor2");

   static void checaValor(String Valor1, String Valor2) {

        String valor_classe = "XX";

        System.out.println(Valor1 == "XX");
        System.out.println(Valor1 == valor_classe);

        if (Valor1 == valor_classe) {
            System.out.println("Comparação funciona!!!");
        }

        if (Valor1 == "XX") {
            System.out.println("Comparação funciona!!!");
        }

        System.out.println("Valor1..: " + Valor1 + " Valor Classe..: " + valor_classe);

    }

Veja quando chamo o método checaValor("XX", "valor2"); o resultado obtido é este:

true
Comparação funciona!!!
Comparação funciona!!!
Valor1..: XX Valor Classe..: XX

Quando chamo o método checaValor("VV", "valor2"); o resultado obtido é este:

false
false
Valor1..: VV Valor Classe..: XX

Então, aparentemente se o objetivo era comparar as Strings, estaria correto. Mas se não for isso, posta novamente pra gente te ajudar =).

Olá Luciano bom dia, identifiquei uma diferença entre o seu código e o meu:

no meu código eu estou passando duas variáveis pra classe chamada. no seu código vocês está passando uma string "XX" fixa, quando eu faço isso no meu ele também funciona.

a questão é, quando eu passo as variáveis ele deixa de funcionar.

com essas variáveis estão vindo de um arquivo, não posso passar como String fixa.

por isso tenho o GET desse valor.

Luciano, olha o que encontrei junto a um amigo:

Código 1
        if (Valor1.equals("XX")) {
            System.out.println("TESTE");
        }else {
            System.out.println("ELSE")
        }

Código 2
        if (Valor1 == "XX") {
            System.out.println("TESTE");
        }else {
            System.out.println("ELSE");
        }

Dentro do código 1 após a consistência ele entra e mostra o Print. Dentro do código 2 após a consistência ele entra e mostra o Print do Else.

teoricamente, os códigos deveriam retornar o mesmo valor, entrando no if e não no ELSE

solução!

Olá André,

o que acontece em Java é que usando o operador == ele sempre compara o valor da variável. No código:

       String valor1 = "XX";
       String valor2 = "XX";
       String valor3 = new String("XX");

       System.out.println(valor1 == valor2);
       System.out.println(valor1 == valor3);
       System.out.println(valor1.equals(valor3));

No caso de valor1 e valor2, para 'economizar' o Java cria um único objeto. Quando ocorre a comparação da variável, o operador == detecta o mesmo conteúdo.

Mas no caso de valor3 houve explicitamente a criação de um novo objeto e consequentemente a referencia dentro da variavel muda.

Se quiser comparar String, o valor literal, o mais seguro será sempre utilizar o método equals.