Comparação IF não funciona entre elementos de listas de inteiros (RESOLVIDO)

Olá pessoal, estou com um problema muito estranho. Possuo esses dois vetores de listas de inteiro declarados:

List <Integer> singlePorts1[]; List <Integer> singlePorts2[];

Após uma série de processamentos esses vetores de listas são preenchidos com alguns valores. Em certa parte da minha aplicação eu possuo o seguinte código, que esta dentro de duas outras estruturas de repetição sobre os índices i e j, mas que não são importantes no momento.

for(int k=0;k<singlePorts1[i].size();k++){ for(int l=0;l<singlePorts2[j].size();l++){ System.out.println(("TESTE IF: "+singlePorts1[i].get(k)+" = "+singlePorts2[j].get(l))); if(singlePorts1[i].get(k)==singlePorts2[j].get(l)){ System.out.println("YESS"); } }

A idéia é que em algum momento singlePorts1[i].get(k) seja igual a singlePorts2[j].get(l)), no entanto, de acordo com o java isso nunca ocorre. Eu coloquei o System.out.println(("TESTE IF: "+singlePorts1[i].get(k)+" = "+singlePorts2[j].get(l))); justamente para testar isso, como saída eu consigo:

“TESTE IF: 1300 = 1300” e mesmo os valores sendo iguais o código dentro do IF não é executado.

NA busca de soluções fiz teste com o seguinte código:

for(int k=0;k<singlePorts1[i].size();k++){ for(int l=0;l<singlePorts2[j].size();l++){ int a = singlePorts1[i].get(k); int b = singlePorts2[j].get(l); System.out.println(("TESTE IF: "+singlePorts1[i].get(k)+" = "+singlePorts2[j].get(l))); if(a==b){ System.out.println("YESS"); } }

Neste caso o IF funciona normalmente, alguém saberia me dizer porque a minha comparação direta com os elementos das listas não funcionou e tive que usar variaveis primitivas de int para isso ?

Muito obrigado.

Por que está comparando objetos, cara.
Integer não é int. Integer é uma classe java do package java.lang e seus elementos, por mais que assumam várias características do primitivo int, são objetos.
Logo, você deve compará-los através do método equals.

if(singlePorts1[i].get(k)equals(singlePorts2[j].get(l))){  
               System.out.println("YESS");
}

E, você tem resultado na segunda abordagem pois ao fazer

int a = singlePorts1[i].get(k);  
             int b = singlePorts2[j].get(l);

Você “desempacota” o intValue do objeto Integer e então o == é assertivo.

Perfeito ^^

Pensava que equals() era só para Strings, muito obrigado (:

[quote=vinicius.olifer]Perfeito ^^

Pensava que equals() era só para Strings, muito obrigado (:[/quote]
Esse é um erro comum.
O método equals é herdado da superclasse Object por alguma razão e, a razão é justamente essa.
Objetos são sempre comparados pelo método equals (salvo se você criar uma forma de fazer tal comparação que não seja esta).

Se as suas listas de java.lang.Integer não tiverem elementos nulos, você pode tentar:

if(singlePorts1[i].get(k) - singlePorts2[j].get(l) == 0){

Como exercício, explique:
a) Por que é que isso funciona, e
b) Se você tiver elementos nulos em pelo menos uma dessas listas, o que ocorre?