Como comparar dois Integer? Dúvida de iniciante

Pessoal,

Integer a = new Integer(“2”);
Integer b = new Integer(“2”);

Preciso saber se a == b. Como faço?

if (a.equals(b)) …

e outra, nao usa new Integer(“2”) usa new Integer(2) mesmo

Se você usar o operador “==” vai estar comparando se as duas variáveis referência apontam para o mesmo endereço na memória… E o método equals compara os atributos destes objetos, no casos os valores inteiros armazenados neles.

Rafael

Na verdade tudo isso funciona da mesma forma.

[code]public class Test {
static Integer i2 = 5;

public static void main(String[] args) {
	Integer i = 5;
			
	System.out.println(i==i2);
	System.out.println(i.intValue()==i2);
	System.out.println(i.intValue()==i2.intValue());
	System.out.println(i.equals(i2));
}

} [/code]

Isso é intrigante… mas… se alguem souber explicar
System.out.println(i==i2);

[quote=volnei]Na verdade tudo isso funciona da mesma forma.

[code]public class Test {
static Integer i2 = 5;

public static void main(String[] args) {
	Integer i = 5;
			
	System.out.println(i==i2);
	System.out.println(i.intValue()==i2);
	System.out.println(i.intValue()==i2.intValue());
	System.out.println(i.equals(i2));
}

} [/code]

Isso é intrigante… mas… se alguem souber explicar
System.out.println(i==i2);[/quote]

Olá… voce não pode usar desta forma:

Integer i = 5;

Pois o tipo referência Integer não é equivalente a um tipo int primitivo literal 5

[quote=Gregoryan]Olá… voce não pode usar desta forma:

Integer i = 5;

Pois o tipo referência Integer não é equivalente a um tipo int primitivo literal 5[/quote]

Quem disse que não?

Como o cv disse num outro tópico (http://www.guj.com.br/posts/list/25152.java):

Pra dificultar um pouco, entao. Pq == funciona nesse caso?

[code]public class WhatTheFuck {
public static final String FOO = “foo”;

public static void main(String[] args) {
String foo = “foo”;
System.out.println(“foo” == “foo”);
System.out.println(“foo” == FOO);
System.out.println(“foo” == foo);
System.out.println(foo == FOO);
}
}[/code]

:mrgreen:

A maldição da tabela de strings imutáveis do java :shock:

1 curtida

Porque a JVM tem um tipo de ‘container de Strings’(pool de strings?) sei lá o nome desse patuá, em que quando já há uma String criada na memória(dentro deste pool), ao se criar outra igual ele permanece a que já existe, e aponta a variávelde referência para o mesmo objeto. Isso tem lógica para acontecer porque Strings são imutáveis.

1 curtida

hmmm, legal! Agora eu tenho uma noção vaga, gostaria de saber o porque mesmo de que temos esses objetos (Integer, Double, …) que encapsulam os tipos primitivos.

Valeu pessoar! :smiley:

Nos temos tipos primitivos em Java pq abstracoes, no fim das contas, falham - especialmente quando se precisa de performance.

Na epoca, os caras achavam que o unico jeito de tornar Java algo performatico seria usar tipos primitivos, mesmo que isso comprometesse a linguagem de algumas maneiras.

Os wrapper objects, (Integer, Long, Double, Character, Boolean, Short, Byte e Float) existem pra que voce possa adicionar um int numa ArrayList sem grilo, por exemplo. Ou seja, eh uma macumba pra fazer com que qualquer metodo que aceite como paramertos ou retorne Object possa tambem trabalhar com tipos primitivos. No Java 5, a necessidade de se trabalhar diretamente com eles foi reduzida bastante por causa do novo recurso de autoboxing, mas ainda assim, tem varios pontos cegos que eh bom prestar atencao - por exemplo, se vc tiver dois metodos sobrecarregados, um que aceita Object e outro int, e passar um 5 como parametro, qual deles eh chamado? Pq? :wink:

Bem, tentando responder a uma pergunta da “Avaliação de Java básico, por CV”. hehehehe

É chamado o que aceita int, pois a constante 5 é considerado um tipo primitivo int. Por questão de performance mesmo né?!

To certo?!

Valeuuu

Tenho uma dúvida … como verificar se um valor inteiro esta contido em uma lista?
Atualmente trabalho com Delphi, porém estou migrando minhas aplicações para o Java, no Delphi usa-se:

var
valor: int;
begin
if (valor in [0, 1, 2]) then
// True
end;

Eis a situação …

Agradeço desde já!

[quote=volnei]Na verdade tudo isso funciona da mesma forma.

[code]public class Test {
static Integer i2 = 5;

public static void main(String[] args) {
	Integer i = 5;
	System.out.println(i==i2);
}

} [/code]

Isso é intrigante… mas… se alguem souber explicar
System.out.println(i==i2);[/quote]

Já que ressucitaram o tópico…
No caso de Short e Integer eles retornam true desde que o valor esteja entre -128 até 127. Para confirmar isso pode-se declaram mais duas variáveis diferentes com o valor 128…retornará false ao invés de true.
Procure sobre Boxing.