Comparant objectes sencers vs int – java

Vaig arreglar un bucle sense fi canviant Integer a int en el següent:

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++;}}}

¿ quina és la raó adequada per a això? Vaig pensar que Integer no compararia cap problema.

Gràcies.

Respostes:

17 per a la resposta № 1

Perquè quan fas! = Comparant en l’objecte, compara les referències. I les referències entre dos objectes en general són diferents.

Quan es comparen les entrades, sempre es comparen les primitives, diguem no referències (no hi ha objectes), sinó valors.

Per tant, si desitja treballar amb Integer, ha d’usar equals () en ells.

a més, si els seus valors estan entre 0 i 255, la comparació entre Enters funciona bé, a causa de l’emmagatzematge en memòria cau.

Pots llegir aquí: http://download.oracle.com/javase/tutorial/java/data/numberclasses.html

6 per a la resposta № 2

Integer és un Object, i els objectes es comparen amb .equals(..)

Només es comparen primitives amb ==

Aquesta és la regla, a part d’alguns casos excepcionals, on == pot ser utilitzat per comparar objectes. Però fins i tot llavors no és aconsellable.

2 per a la resposta № 3

El problema és que Integer és una classe iper tant, fins i tot la comparació es realitza com per a qualsevol altra classe, utilitzant el mètode .equals () . Si ho compara amb ==, compara les referències que sempre són diferents per a dues instàncies diferents. El tipus primitiu int no és una classe, sinó un tipus incorporat de Java i la comparació és manejada especialment pel compilador i funciona com s’espera.

2 per a la resposta № 4

Feu servir Integer.intValue () per obtenir el valor int per a la comparació, si realment necessita utilitzar Integer.

1 per a la resposta № 5

Integer és un embolcall de classe al voltant de l’tipus primitiu Java int. No són la mateixa cosa. ha d’usar int en lloc de Integer, llevat que tingui un motiu vàlid (com ArrayList<Integer> list;

Leave a Comment

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *