# Kuidas Java instanceof operaator töötab

Java operaatorit `instanceof` saab kasutada selleks, et kontrollida, kas objekt kuulub teatud klassi. Operaator annab vastuse boolesena, st „true” või „false”. Objekti ja klassi eelnev vastavuse kontrollimine aitab vältida hilisemaid veateateid.

## Mis on `instanceof` Java-s?

Mõnede Java muutujate olemus ei ole alati kohe selge. Suurtes Java-projektides, kus on palju muutujaid, võivad näiteks sisendandmed põhjustada muutuja ilmumise erinevate objektidena. Seetõttu pakub programmeerimiskeel kasutajatele `instanceof`. See Java-operaator tagab, et viitemuutuja **instants** vastab tõepoolest klassile, alamklassile või liidesele. Kui vastavus on olemas, väljastab operaator booli väärtuse „true”. Kui vastavust ei ole, on väljund „false”.

Tundmatu objekti teisendamisel on oluline kasutada Java `instanceof`, et tagada objekti kuuluvus eeldatavasse klassi. Kui see turvakontroll vahele jäetakse, võib tekkida **ClassCastException**. See juhtub, kui objekt tuleb teisendada teise klassi. Veateade võib olla segadust tekitav ja põhjustada probleeme, kui kood on eriti pikk. Seetõttu on parim kasutada varakult Java `instanceof` turvalisuse tagamiseks.

## Mis on `instanceof` süntaks?

Kui kasutate Java-s `instanceof`, **võrdleb** operaator **viitemuutujat konkreetse klassiga,** mille on samuti määranud kasutaja. See ei sisalda mingit lisateavet objekti või klassi olemuse kohta. See lihtsalt määrab kindlaks, kas vastavus on olemas või mitte. Süntaks on lihtne ja näeb välja järgmine:

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

Kui `(object)` on `(class)` juhtum, kuvatakse „true”. Kui see ei ole nii, kuvatakse „false”.

## Näited `instanceof` operaatorist Java keeles

Esmalt näitame teile lühikest näidet, kuidas `instanceof` Java-s töötab. Siin loome klassi nimega „Animal”.

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

Järgmine samm on laiendada seda klassi alamklassiga nimega „Cat”.

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

Nüüd saame Java `instanceof` abil kontrollida, kas Cat’i instants kuulub Animal’i klassi. Selleks kirjutame veel mõned koodiridad ja väljastame tulemuse Java käsuga `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);
}
}
```

Väljund peaks välja nägema järgmine:

```java
true
```

### Mitmed tasemed ja objektiklass

See põhimõte kehtib ka Main-klassi ja teiste alamklasside puhul. Järgmises näites on mitu taset ja oleme laiendanud Java `instanceof` `if-else`. Võite märgata, et kahe kaldkriipsu (//) järel on lisatud täiendavat teksti. Need on [Java kommentaarid](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/java-kommentaarid/). Need selgitavad üksikuid samme, kuid ei mõjuta väljundit.

```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");
	}
}
```

Meie näite puhul näeme, et cat1 on Cat-klassi ja Animal-ülemklassi instants. Seega on mõlema küsimuse vastus „true”. Kuna Object ehk klass `java.lang.Object` asub hierarhia tipus, on cat1 ka Object-klassi instants. Seega annab `instanceof` -operaator Object-klassiga kasutamisel alati tulemuseks true. Väljund näeb välja järgmine:

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

### Väljund nullväärtusega

Kui muutujal on nullväärtus (st ei sisalda objekti), väljastab Java operaator `instanceof` automaatselt väärtuse „false”. Vaadakem, kuidas see toimib järgmise näite abil:

```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");
	}
}
```

Selle juhtumi väljund on:

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

### Ülemklass/alamklass

Kuigi alamklasside objektid kuuluvad ka alamklassi vastavatesse ülemklassidesse, ei kehti see vastupidi. Järgmine näide aitab illustreerida klassihierarhia seda aspekti:

```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");
	}
}
```

Selle juhtumi väljund on:

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

### Vigade sõnum ühilduvate tüüpide puhul

Kui objekti ja klassi vahel puudub seos, kuvatakse veateade. Selle illustreerimiseks loome uue klassi nimega „Dog”, mis kuulub superklassi „Animal”, kuid millel puudub seos klassiga „Cat”.

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

Selles olukorras saame veateate, mis teatab, et Cat- ja Dog-klasside vahel puudub seos. Teade näeb välja järgmine:

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

Tip Meie digitaalsest juhendist leiate veelgi põnevaid õpetusi ja informatiivseid artikleid Java kohta. Leiate võrdluse [Java ja JavaScripti](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/java-vs-javascript/) ning [Java ja Pythoni](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/python-vs-java/) vahel. Samuti saate rohkem teada [Java bitiviisiliste operaatorite](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/java-bitiviisilised-operaatorid/) kohta.


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/java-instanceof-operaator/](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/java-instanceof-operaator/) for AI/LLM consumption.