webForumDet fria alternativet

Tillåtet att testa om null

13 svar · 415 visningar · startad av N-Foe

N-FoeMedlem sedan juni 200384 inlägg
#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?

SPiNMedlem sedan mars 20007 896 inlägg
#2

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

N-FoeMedlem 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"

PhorpherMedlem sedan feb. 20002 300 inlägg
#4

null är inte en int.

if(index != 0)
{
...
}
SPiNMedlem 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 )
     ...
N-FoeMedlem 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.

SPiNMedlem 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.

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

}
SPiNMedlem 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.

N-FoeMedlem 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.

SPiNMedlem sedan mars 20007 896 inlägg
#11

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

LimeMedlem sedan sep. 2001961 inlägg
#12

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

N-FoeMedlem 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.

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

133 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)