webForumDet fria alternativet

Tillåtet att testa om null

Java

13 svar · 417 visningar · startad av N-Foe

Medlem sedan juni 200384 inlägg
Frågan#1

Ä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?

Medlem sedan mars 20007 896 inlägg
#2

Hur klagar eclipse då? Hur gör du?

Medlem sedan juni 200384 inlägg
#3
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"

Medlem sedan feb. 20002 300 inlägg
#4

null är inte en int.

if(index != 0)
{
...
}
Medlem sedan mars 20007 896 inlägg
#5

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 )
     ...
Medlem sedan juni 200384 inlägg
#6

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.

Medlem sedan mars 20007 896 inlägg
#7

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.

Medlem sedan juni 200384 inlägg
#8

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){

}
Medlem sedan mars 20007 896 inlägg
#9

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.

Medlem sedan juni 200384 inlägg
#10

Nej, det är sant!
Alternativet är en wrapper där en flagga används om det ej är tilldelat.

Medlem sedan mars 20007 896 inlägg
#11

Ja, precis. Det är ju enkelt gjort men något som man gärna vill undvika. :)

Medlem sedan sep. 2001961 inlägg
#12

Eh? När du deklarerar den så initierar du vällan index till -1 och testar på det?

Medlem sedan juni 200384 inlägg
#13

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.

Medlem sedan juni 200010 432 inlägg
#14

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 ;)

245 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)