Kan een int
null
zijn in Java?
Bijvoorbeeld:
int data = check(Node root);
if ( data == null ) {
// do something
} else {
// do something
}
Mijn doel is om een functie te schrijven die een int
retourneert. Genoemde int
is opgeslagen in de hoogte van een knooppunt, en als het knooppunt niet aanwezig is, is het null en moet ik dat controleren.
Ik doe dit als huiswerk, maar dit specifieke onderdeel maakt geen deel uit van het huiswerk, het helpt me alleen om door te krijgen wat ik doe.
Bedankt voor de opmerkingen, maar het lijkt erop dat maar heel weinig mensen hebben gelezen wat er onder de code staat. Ik vroeg me af hoe ik dit doel anders kan bereiken; het was gemakkelijk om erachter te komen dat het niet werkt.
Antwoord 1, autoriteit 100%
int
kan nietnull zijn, maar Integer
kan. Je moet voorzichtig zijn bij het uitpakken van null Integers, omdat dit veel verwarring en hoofdkrabben kan veroorzaken!
bijv. dit:
int a = object.getA(); // getA returns a null Integer
geeft u een NullPointerException
, ondanks dat het object niet null is!
Als vervolg op uw vraag, als u de afwezigheidvan een waarde wilt aangeven, zou ik java.util.Optional<Integer>
onderzoeken
Antwoord 2, autoriteit 19%
Nee. Alleen objectreferenties kunnen nul zijn, geen primitieven.
Antwoord 3, autoriteit 13%
Een geweldige manier om erachter te komen:
public static void main(String args[]) {
int i = null;
}
Probeer te compileren.
Antwoord 4, autoriteit 8%
In Java is INT een primitief type en wordt niet als een object beschouwd. Alleen objecten kunnen een nulwaarde hebben. Dus het antwoord op uw vraag is nee, het kan niet nul zijn. Maar het is niet zo eenvoudig, omdat er objecten zijn die de meeste primitieve typen vertegenwoordigen.
Het klasse-integer vertegenwoordigt een INT-waarde, maar het kan een nulwaarde bevatten. Afhankelijk van uw check
methode, kunt u een int of een geheel getal retourneren.
Dit gedrag is anders dan wat meer puur object georiënteerde talen zoals Ruby, waar zelfs “primitieve” dingen zoals inten worden beschouwd.
5, Autoriteit 4%
Samen met het bovenstaande antwoord zou ik dit punt ook willen toevoegen.
Voor primitieve typen hebben we een vaste geheugenformaat I.E voor Int We hebben 4 bytes en Char. We hebben 2 bytes. En null wordt alleen gebruikt voor objecten omdat er geen geheugengrootte is vastgelegd.
Dus standaard hebben we,
int a=0;
en niet
int a=null;
hetzelfde met andere primitieve typen en dus null wordt alleen gebruikt voor objecten en niet voor primitieve typen.
Antwoord 6, autoriteit 2%
in plaats van te declareren als int i
te declareren als Integer i
dan kunnen we i=null;
doen
Integer i;
i=null;
Antwoord 7
Integer object zou het beste zijn. Als u primitieven moet gebruiken, kunt u een waarde gebruiken die niet bestaat in uw use-case. Negatieve lengte bestaat niet voor mensen, dus
public int getHeight(String name){
if(map.containsKey(name)){
return map.get(name);
}else{
return -1;
}
}
Antwoord 8
Nee, maar int[]kan wel.
int[] hayhay = null; //: allowed (int[] is reference type)
int hayno = null; //: error (int is primitive type)
//: Message: incompatible types:
//: <null> cannot be converted to int
Antwoord 9
Zoals @Glen al zei in een opmerking, kun je hier in principe op twee manieren omheen:
- gebruik een “buiten bereik” waarde. Als ‘gegevens’ bijvoorbeeld bij normaal gebruik nooit negatief kunnen zijn, retourneert u een negatieve waarde om aan te geven dat deze ongeldig is.
- Gebruik een geheel getal. Zorg ervoor dat de “check”-methode een Integer retourneert, en dat u deze toewijst aan een Integer en niet aan een int. Want als er onderweg een “int” tussenkomt, kan het automatisch boksen en unboxen voor problemen zorgen.
Antwoord 10
Controleer op null in uw methode check() en retourneer een ongeldige waarde zoals -1 of nul indien null. Dan zou de controle voor die waarde zijn in plaats van de nul door te geven. Dit zou normaal zijn om te doen in de oude tijd ‘C’.
Antwoord 11
Elk primitief gegevenstype zoals int,boolean of float enz. kan de null(laterale) niet opslaan, aangezien java de Wrapper-klasse heeft geleverd om hetzelfde op te slaan, zoals int naar Integer,boolean naar Boolean.
Bijvoorbeeld: geheel getal i=null;
Antwoord 12
Een int is niet null, het kan 0 zijn als het niet is geïnitialiseerd. Als u wilt dat een geheel getal null kan zijn, moet u Integer gebruiken in plaats van int . primitieven hebben geen nulwaarde. standaard hebben voor een int is 0.
Gegevenstype / standaardwaarde (voor velden)
int —————— 0
lang —————- 0L
drijven —————- 0.0f
dubbel ————- 0.0d
char ————— ‘\u0000’
String ————— null
boolean ———— false
Antwoord 13
Omdat je om een andere manier vraagt om je doel te bereiken, raad ik je aan een wrapper-klasse te gebruiken:
new Integer(null);
Antwoord 14
Ik ben geen expert, maar ik geloof wel dat het null
equivalent voor een int 0
is.
Als u bijvoorbeeld een int[]
maakt, bevat elk slot 0
in plaats van null
, tenzij u het op iets instelt anders.
In sommige situaties kan dit nuttig zijn.