Kan een int in Java null zijn?

Kan een intnullzijn 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 intretourneert. Genoemde intis 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%

intkan nietnull zijn, maar Integerkan. 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 checkmethode, 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 ite declareren als Integer idan 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 nullequivalent voor een int 0is.

Als u bijvoorbeeld een int[]maakt, bevat elk slot 0in plaats van null, tenzij u het op iets instelt anders.

In sommige situaties kan dit nuttig zijn.

Other episodes