Comparando obxectos enteiros vs int – java

Eu fixen un ciclo sen fin cambiando o enteiro a INT da páxina seguinte:

public class IntTest {public static void main(String args) {Integer x=-1;Integer total=1000;while(x != total){System.out.println("x =" + x + "total ="+ total);x++;}}}

Cal é a razón correcta para isto? Penso que o enteiro non compararía ningún problema.

Grazas.

Respostas:

17 Para a resposta № 1

Porque cando o fas! = Comparar no obxecto, comparar as referencias. E as referencias entre dous obxectos en xeral son diferentes.

Cando se comparan as entradas, as primitivas sempre se comparan, digamos que non hai referencias (sen obxectos), senón valores.

Polo tanto, se queres traballar con enteiro, debes use igual () neles.

Ademais, se os seus valores están entre 0 e 255, a comparación entre os enteiros funciona ben, debido á caché.

pode ler AQUÍ: http://download.oracle.com/javase/tutorial/java/data/numberclasses.html

6 para a resposta № 2

Integer é un Object e os obxectos son comparados con .equals(..)

só se compara primitivas con ==

que é a regra, ademais de algúns casos excepcionais, onde == pódese usar para comparar obxectos. Pero aínda así non é aconsellable.

2 Para a resposta № 3

O problema é que o número enteiro é unha clase e, polo tanto, incluso a comparación está feita como para calquera outra clase, usando o método .igal () (). Se compares con ==, compara as referencias que sempre son diferentes para dúas instancias diferentes. O tipo primitivo int non é unha clase, senón que un tipo Java incorporado e a comparación é tratado especialmente polo compilador e funciona como se esperaba.

2 para a resposta № 4

Pode usar integer.intvalue () para obter o valor int para a comparación, se realmente ten que usar enteiro.

1 para a resposta № 5

enteiro é un sobre de clase ao redor do Java Tipo primitivo int. Non son o mesmo. Debes usar int no canto de enteiro, a menos que teñas un motivo válido (como ArrayList<Integer> list;

Leave a Comment

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *