Är det inte längre tillåtet i Java 1.4 att testa om en variabel är null?
Får inga kompileringsfel, men Eclipse klagar.. Anses det inte vara god programmeringssed?
13 svar · 415 visningar · startad av N-Foe
Är det inte längre tillåtet i Java 1.4 att testa om en variabel är null?
Får inga kompileringsfel, men Eclipse klagar.. Anses det inte vara god programmeringssed?
Hur klagar eclipse då? Hur gör du?
int index;
for(...){
//Gör nåt med index
}
if(index != null){
//Gör nångting
}
Eclipse klagar så här:
"The operator != is undefined for the argument type(s) int, null"
Det är för att en 'int' inte kan vara null, utan får ett 0-värde. 'int' är en datatyp och inte en klass, däremot skulle det fungera att göra en jämförelse på klassen Integer.
Alltså:
if( index != 0 )
...
Nä, men jag kollar ju ifall index är tilldelat. Om jag inte vet vad index kommer att tilldelas och jag vill endast kolla om det har tilldelats så är det ju enklast att kontrollera om variabeln pekar på null.
Det går som sagt inte att göra en jämförelse på datatyper mot null. En jämförelse mot 0 går väl lika bra? Annars får du wrappa någon klass runt en datatyp int.
Ok.
Men om jag inte vet vad index kommer att tilldelas så kan jag inte testa mot 0. Antar att man får göra så här för att slippa en wrapper:
int index = Integer.MIN_VALUE;
for(....){
}
if(index>Integer.MIN_VALUE){
}
Men det där blir ju ändå inte riktigt rätt väl? Eftersom att en int endast kan få värden mellan -2^31 och (2^31 - 1 ). Om nu resultatet från for-loopen blir att -2^31 läggs i variabeln index kommer du ändå inte in i if-satsen. Då måste du vara säker på att det talet inte hamnar där. Finns det någon möjlighet för dig att bara hantera positiva nummer samt 0, så underlättar det ju för dig.
Nej, det är sant!
Alternativet är en wrapper där en flagga används om det ej är tilldelat.
Ja, precis. Det är ju enkelt gjort men något som man gärna vill undvika. :)
Eh? När du deklarerar den så initierar du vällan index till -1 och testar på det?
Jo men då förutsätter du att index > 0. I det allmänna fallet är det inte så. Olyckligtvis skrev jag index på variabeln, men frågan gäller även då variabeln inte är belagd med premisser.
N-Foe skrev:
Jo men då förutsätter du att index > 0. I det allmänna fallet är det inte så. Olyckligtvis skrev jag index på variabeln, men frågan gäller även då variabeln inte är belagd med premisser.
Om han initierar den till -1 bör 'allmänna fallet' finnas med ;)
Men när det gäller variabler måste du skilja på s.k primitiver och i språket definierade typer som ligger under Object. Så en int (och char) blir inte 'null' hur du än gör, men däremot kan en Integer vara 'null'. Sen kan ju en odefinierad variabel aldrig ge nåt vettigt ö.h.t ;)