Java >> Java tutorial >  >> Tag >> char

Java "int/char kan ikke dereferences"-fejl

1. Oversigt

I denne tutorial vil vi se nærmere på Java-fejlen, "int kan ikke dereferences". Først vil vi lave et eksempel på, hvordan man fremstiller det. Dernæst vil vi forklare den førende årsag til undtagelsen. Og til sidst vil vi se, hvordan du løser det.

2. Praktisk eksempel

Lad os nu se et eksempel, der genererer en kompileringsfejl, "X kan ikke dereferences".

Her, X repræsenterer en af ​​de otte Java-primitiver, nemlig intbytekortlangflydendedobbeltboolesk , og char .

Lad os først oprette en klasse Test og sammenlign en int til en anden værdi :

int x = 10;
System.out.println(x.equals(10));

Når vi kompilerer koden fra terminalen, får vi fejlen:

$ javac Test.java
Test.java:8: error: int cannot be dereferenced
        System.out.println(x.toString());
                            ^
1 error

Også moderne IDE'er som Eclipse og IntelliJ vil vise en fejl uden selv at kompilere:

3. Årsag

I Java er en reference en adresse til et eller andet objekt/variabel. Dereference betyder handlingen med at få adgang til et objekts funktioner gennem en reference. Udførelse af enhver dereference på en primitiv vil resultere i fejlen "X kan ikke dereferences", hvor X er en primitiv type. Grunden til dette er, at primitiver ikke betragtes som objekter - de repræsenterer råværdier:

int x = 10;
System.out.println(x.equals(10));

Når vi bygger koden fra terminalen, får vi fejlen "int kan ikke dereferences" .

Dog med Objekt , det fungerer fint:

Object testObj = new Object();
testObj.toString();

Her, testObj er et objekt, og dereferencing sker ved kald af toString() med . operatør på testObj. Dette vil ikke give nogen fejl som testObj er et objekt, og dermed vil dereferencing fungere.

4. Løsning

I vores eksempel skal vi kontrollere ligheden mellem de to værdier.

Den første løsning på vores problem er at bruge == i stedet for lig med() for primitive typer :

int x = 10;
System.out.println(x == 10);

Når vi kører koden, vil den udskrive "true".

Den anden løsning er at ændre primitivet til en indpakningsklasse .

Java leverer wrapper-klasseobjekter for hver primitiv type.

For eksempel kan vi konvertere primitive typer til et wrapper-objekt, hvis vi skal bruge equals() :

Integer x = 10;
System.out.println(x.equals(10));

Denne fejl har ikke en ensartet løsning. Afhængigt af use casen kan vi bruge en af ​​de to ovenstående løsninger.

5. Konklusion

Vi har forklaret Javas “int kan ikke dereferences” fejl. Derefter diskuterede vi, hvordan man producerer fejlen og årsagen til undtagelsen. Til sidst diskuterede vi en løsning til at løse fejlen.


Java tag