Pure Java – 40 Operators – 02

Merhaba Arkadaslar,
Bir onceki yazida Java’da Operatorler konusu ile 4.bolume baslamistik. Bu bolumde de bir onceki yazida belirtigimiz Type Comparison Operator yani instanceof operatorunu inceleyecegiz.

Type Comparison Operator(Tip Karsilastirma Operatoru)
Java da tip karsilastirma operatoru olarak instanceof anahtar kelimesi kullanilarak yapilir. instanceof operatoru sadece referans tipte degiskenler icin kullanilabilir. instanceof operatoru IS-A kontrolu yapmaktadir.

Java’da 8 tane primitive tipte degisken bulunmaktadir. Bildigimiz gibi String bu ilkel tiplerden degildir. Dolayisiyla instanceof operatorunu kullanabiliriz.

public class Test {
	public static void main(String[] args) {

		String name = "levent";
		if (name instanceof String) {
			System.out.println("name is a String");  // instanceof kontrolu // IS-A
		}

		int age = 24;
		// primitive tipler icin instanceof kontrolu yapilamaz.
		// if(age instanceof Integer){} //derleme hatasi  // 
		// if(age instanceof int) {} //derleme hatasi

		if(name instanceof Object) {
			System.out.println("name is an Object");  // String IS-A Objects
		}

	}
}

instanceof operatoru IS-A kontrolu yapmaktadir demistik, simdi sinif ve arabirim kullanarak biraz kod daha yazalim ;

interface Z {
}

class A implements Z {
}

class B extends A {
}

public class C extends B {

	public static void main(String[] args) {

		Z z1 = new A();
		Z z2 = new B();
		Z z3 = new C();

		A a0 = new A();
		A a1 = new B();
		A a2 = new C();

		B b0 = new B();
		B b1 = new C();

		C c1 = new C();

		// z1 referans degiskeni A sinifi turunde bir objeye refarans
		// etmektedir.
		// IS-A kuralini dikkate alarak sonuclari dusunelim.
		System.out.println("z1 instanceof test");
		System.out.println(z1 instanceof A); // true
		System.out.println(z1 instanceof B); // false
		System.out.println(z1 instanceof C); // false

		System.out.println("ao instanceof test");
		System.out.println(a0 instanceof Z);
		System.out.println(a0 instanceof A);
		System.out.println(a0 instanceof B);
		System.out.println(a0 instanceof C);

		System.out.println("c1 instanceof test");
		System.out.println(c1 instanceof Z);
		System.out.println(c1 instanceof A);
		System.out.println(c1 instanceof B);
		System.out.println(c1 instanceof C);

	}
}

Sonuclar sasirtici gelirse onceki yazilarda bahsettigim IS-A kuralini incelemekte fayda olacaktir. Bu konuda bol miktar kod yazmanizi oneririm.

instanceof kontrolunu null ile de yapabiliriz, sonuc olarak her zaman false donecektir.

public class TestNull {

	public static void main(String[] args) {
		String a=null;
		boolean b = null instanceof String;  //false
		boolean c = a instanceof String; //false
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
	}
}

instanceof operatorunu farkli sinif hiyerarsileri icin kullanamayiz.

class Cat {
}

interface IFace {

}

public class Dog {
	public static void main(String[] args) {
		Dog dog = new Dog();
		System.out.println(dog instanceof Dog);
		// farkli sinif hiyerasisinde bulunan siniflar arasinda instanceof 
		// operatoru derleme hatasina neden olur.
		//System.out.println(dog instanceof Cat); // derleme hatasi 
		//Bu durum interface icin soz konusu degildir.
		System.out.println(dog instanceof IFace);

	}
}

Hatirlayacagimiz gibi Javada bir dizi icin her zaman IS-A Object kontrolu dogrudur.

public class ArrayTest {

	public static void main(String[] args) {
		int [] number = new int[5] ; 
		//array tanimlamasini incelemistik. Array tipindeki bir degisken icin her zaman IS-A Object kurali dogrudur.
		//Bu dizimizin elemanlari "int" tipinde oldugunu hatirlayalim
		System.out.println(number instanceof Object);
	}
}

Yazimi burada sonlandiriyorum.

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *