# Kaip veikia Java operatorius instanceof

Java operatorius `instanceof` leidžia patikrinti, ar objektas priklauso tam tikrai klasei. Operatorius pateikia atsakymą Būlio teiginio forma, t. y. „true“ arba „false“. Iš anksto patikrinus, ar objektas ir klasė atitinka vienas kitą, galima išvengti vėlesnių klaidų pranešimų.

## Kas yra `instanceof` Java kalboje?

Kai kurių Java kintamųjų pobūdis ne visada yra iš karto aiškus. Didelėse Java projektuose, kuriuose yra daug kintamųjų, įvesties duomenys, pavyzdžiui, gali sukelti, kad kintamasis atrodytų kaip skirtingi objektai. Štai kodėl programavimo kalba vartotojams siūlo `instanceof`. Šis Java operatorius užtikrina, kad nuorodos kintamojo **egzempliorius** tikrai atitiktų klasę, paklasę arba sąsają. Jei yra atitikimas, operatorius išveda Būlio vertę „true“. Jei atitikimo nėra, išvedama „false“.

Konvertuojant nežinomą objektą, svarbu naudoti Java `instanceof`, kad būtų užtikrinta, jog objektas priklauso numatytai klasei. Jei praleisite šį saugumo patikrinimą, gali būti išduotas **ClassCastException**. Tai atsitinka, kai objektas turi būti konvertuotas į kitą klasę. Klaidos pranešimas gali būti painus ir sukelti problemų, jei kodas yra ypač ilgas. Todėl geriausia iš anksto naudoti Java `instanceof` kaip apsaugos priemonę.

## Kokia yra `instanceof` sintaksė?

Kai naudojate `instanceof` Java kalboje, operatorius **lygina nuorodų kintamąjį su konkrečia klase**, kurią taip pat nurodo vartotojas. Jis neapima jokios papildomos informacijos apie objekto ar klasės pobūdį. Jis tiesiog nustato, ar yra atitikimas, ar ne. Sintaksė yra paprasta ir atrodo taip:

```java
(object) instanceof (class)
```

Jei `(object)` yra `(class)` atvejis, rodomas „true“. Jei taip nėra, rodomas „false“.

## `instanceof` operatoriaus pavyzdžiai Java kalboje

Pirmiausia pateiksime trumpą pavyzdį, kuris parodys, kaip `instanceof` veikia Java kalboje. Čia sukursime klasę pavadinimu „Animal“.

```java
public class Animal {
}
```

Kitas žingsnis – išplėsti šią klasę, sukuriant pakaitinę klasę „Cat“.

```java
public class Cat extends Animal {
}
```

Dabar galime naudoti Java `instanceof`, kad patikrintume, ar Cat klasės instansas priklauso Animal klasei. Tam parašysime keletą papildomų kodų eilučių ir išvesime rezultatą naudodami Java komandą `System.out.println`:

```java
public class Animal {}
public class Cat extends Animal {
public static void main(String args []{
Cat cat = new Cat();
System.out.println(cat instanceof Animal);
}
}
```

Rezultatas turėtų atrodyti taip:

```java
true
```

### Keli lygiai ir objektų klasė

Šis principas taip pat veikia su pagrindine klase ir kitomis pakaitinėmis klasėmis. Kitas pavyzdys apima kelis lygius, o mes išplėtėme Java `instanceof` operatorius iki `if-else`. Galite pastebėti papildomą tekstą, esantį po dviejų brūkšnelių (//). Tai yra [Java komentarai](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/java-komentarai/). Jie paaiškina atskirus žingsnius, bet neturi įtakos rezultatui.

```java
// Class 1
// Superclass
public class Animal {
}
// Class 2
// Subclass
class Cat extends Animal {
}
// Class 3
// Main class
class Main {
public static void main(String[] args)
Cat cat1 = new Cat();
if (cat1 instanceof Cat)
	System.out.println ("cat1 is an instance of Cat");
else
	System.out.println ("cat1 is NOT an instance of Cat");
if (cat1 instanceof Animal)
	System.out.println ("cat1 is an instance of Animal");
else
	System.out.println ("cat1 is NOT an instance of Animal");
if (cat1 instanceof Object)
	System.out.println ("cat1 is an instance of Object");
else
	System.out.println ("cat1 is NOT an instance of Object");
	}
}
```

Žiūrėdami į mūsų pavyzdį, matome, kad cat1 yra Cat klasės ir Animal superklasės instansas. Taigi, atsakymas į abu klausimus yra „true“. Kadangi Object arba klasė `java.lang.Object` yra hierarchijos viršuje, cat1 taip pat yra Object instansas. Taigi, Java `instanceof` operatorius visada išves true, kai naudojamas su Object klase. Rezultatas atrodo taip:

```java
cat1 is an instance of Cat
cat1 is an instance of Animal
cat1 is an instance of Object
```

### Išvestis su nuline verte

Jei kintamasis turi nulio vertę (t. y. neapima objekto), Java operatorius `instanceof` automatiškai išveda „false“. Pažiūrėkime, kaip tai veikia, remdamiesi šiuo pavyzdžiu:

```java
class Cat {
}
class Main {
public static void main(String[] args)
{
Cat cat2 = null;
if (cat2 instanceof Cat)
	System.out.println ("cat2 is an instance of Cat");
else
	System.out.println ("cat2 is NOT an instance of Cat");
	}
}
```

Šiuo atveju rezultatas yra:

```java
cat2 is NOT an instance of Cat
```

### Superklasė/paklasė

Nors subklasių objektai taip pat priklauso subklasių atitinkamoms superklasėms, atvirkščiai tai neveikia. Šis pavyzdys padeda iliustruoti šį klasės hierarchijos aspektą:

```java
class Animal {
}
class Cat extends Animal {
}
class Main {
public static void main(String[] args)
{
Animal bello = new Animal ();
if (bello instanceof Cat)
	System.out.println ("Bello is an instance of Cat");
else
	System.out.println ("Bello is NOT an instance of Cat");
	}
}
```

Šiuo atveju rezultatas yra:

```java
Bello is NOT an instance of Cat
```

### Klaidos pranešimas dėl nesuderinamų tipų

Jei tarp objekto ir klasės nėra ryšio, bus rodomas klaidos pranešimas. Norėdami tai iliustruoti, sukursime naują klasę „Dog“, kuri priklauso viršklasei „Animal“, bet neturi ryšio su „Cat“.

```java
class Dog extends Animal {
}
class Main {
public static void main(String[] args)
{
Cat cat3 = new Cat ();
System.out.println (cat3 instanceof Dog);
	}
}
```

Šioje situacijoje gausime klaidos pranešimą, informuojantį, kad nėra ryšio tarp Cat ir Dog klasių. Pranešimas atrodo taip:

```java
java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Cat and Dog
```

Tip Mūsų skaitmeniniame vadove rasite daugiau įdomių pamokų ir informatyvių straipsnių apie Java. Čia rasite [Java ir JavaScript](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/java-pries-javascript/) palyginimą, taip pat [Java ir Python](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-pries-java/) palyginimą. Taip pat galite sužinoti daugiau apie [Java bitinius operatorius](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/java-bitu-operatoriai/).


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/java-operatorius-instanceof/](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/java-operatorius-instanceof/) for AI/LLM consumption.