Minter Coder Hack-Mack-Bi şeyler

07 Eylül

java java veri tipleri ilkel tipler referans tipler

Bölüm 1.4: Java Veri Tipleri

Selam gençler;

Java'da veri tiplerine değineceğiz. Veri tipleri 2'ye ayrılır primitive (ilkel) ve referans veri tipleri; aşağıya 15 dakika uğraşıp efsanevi Leonardo da Vinci'ye taş çıkaran tabloyu bırakıyorum.

Primitive Types (İlkel Tipler)

Java da 8 tane built-in primitive types vardır. Bunlar;

byte 1 byte -128'den 127'ye 0
short 2 byte -32.768'den 32.767'ye 0
int 4 byte -2,147,483,648'den 2,147,483,647'ye 0
long 8 byte

-9,223,372,036,854,775,808'den

9,223,372,036,854,775,807'ye

0
float 4 byte ,'den sonra 7 rakama kadar destek 0.0F yada 0.0f
double 8 byte ,'den sonra 16 rakama kadar destek 0.0d yada 0.0D
char 2 byte ASCII değerler 0'dan 255'e kadar '\u0000'
boolean 1 byte true yada false false

 

Şimdi sırasıyla inceleyelim.

 

  1. boolean Data Type : Bu veri tipi mantıksal süreçlerde bir sürecin sonucunun doğru mu yada yanlış mı olduğunda kendi üzerinde tuttuğu veridir, yani bir şart var ve bu şart doğru mu yanlış mı onu tutuyor. Aldığı değerler : 
    • true 
    • false
boolean benimSartimDogruMu = true;
boolean yanlisiTut = false;
  • byte Data Type : Bu veri tipi de -127 ile 128 arasında değer tutar ve int,long ve short'a kıyasla bellekte daha az veri tutulduğu için kullanılır. Varsayılan değeri 0'dır.
byte kucukDeger = 23;
byte buyukDeger = -99;
  • short Data Type : Bu veri tipi 2 byte kaplar bellekte ve değer aralığı ise -32,768'den 32,767'ye kadardır. Bu da bellekte byte'tan fazla ama int'den az değer kaplanması gerekiyorsa eğer ki bellekte, bu şartlarda short kullanılır. Varsayılan değeri 0'dır.
short mint = 25000;
short maxt = -20000;
  • int Data Type : Bellekte 4 byte yer kaplayan -2,147,483,648'dan 2,147,483,647'a kadar değer alan veri tipidir. Java'da sayılandırmalarda en çok kullanılan veri tipi budur. Varsayılan değeri 0'dır.
int sayim = 14;
  • long Data Type : Bellekte 8 byte yer kaplayan - 9,223,372,036,854,775,808'dan 9,223,372,036,854,775,807'a kadar değer alan en büyük sayısal veri tutan tiptir. Varsayıaln değeri 0.0L yada 0.0l'dir.
    • long veri tipine değişken ataması yapılırken sonuna 'l' yada 'L' bırakılması gereklidir yoksa compiler bunu otomatikman int olarak algılar.
long longDegerim = 120321321L;
long longDegerimKucukHarf = 120321321l;
  • float Data Type  :Bu veri tipi'de bizim artık tamsayı değerlerden ziyade kayan sayılar yani , içeren 1.2, 44.5 gibi virgül içeren sayıları tutmada kullanılır ve bellekte 4 byte yer kaplar.
    • float Data Type varsayılan değeri 0.0f yada 0.0F'dir.
    • bu veri tipine değer atanırken sonuna 'f' yada 'F' getirilmelidir.
float sayim = 44.5f;
float sayim2 = -55.4F;

eğer ki sonuna 'f' yada 'F' bırakılmazsa double olarak algılandığından compiler hata verecektir.

  • double Data Type : Bu veri tipi de float gibi kayan sayıları tutmak için kullanılır ve bellekte 8 byte yer kaplar eğer ki float'a istinaden daha fazla virgülden sonra değer tutulması yada finansal işlemler, system programming gibi büyük süreçler için büyük sayılarla oynanıyorsa, float yerine double kullanmak en mantıklısıdır. Varsayılan değeri : 0.0,   0.0d,  0.0D
double d = 44.4D;
double d2 = 25.8d;
double d3 = 99.9;

normalde double kullanılırken sonuna herhangi bir harf 'd' yada 'D' getirmeyiz zaten default olarak da kayan sayı kullandığımızda Java onu double veri tipi olarak algılayacaktır.

  • char Data Type : Java'da kullanılan sadece bir karakteri tutan ve bellekte 2 byte yer kaplayan veri tipidir. Unicode değerlere bakarak verileri tutar bu örnekte çok daha iyi anlaşılır.
char myChar = 65; // Unicode tablosunda 65 'A' yı temsil eder.
System.out.println("myChar : "+myChar); // Çıktısı "myChar : A" yazar.
char myLetter = 'A';
System.out.println("myLetter : "+myLetter);
System.out.println("myLetter'in int değeri : "+(int)myLetter);

https://en.wikipedia.org/wiki/List_of_Unicode_characters

Birkaç Ufak Not : Kod içerisinde eğer ki rakam yada bir sayı varsa bu "literal" olarak adlandırılır. Varsayılan olarak, Java siz eğer ki bir literal tanımlıyorsanız bunu int olarak kabul eder. O yüzden dedik ya numeric bir sayı yani virgül olmayan sayı tanımlarsanız bunu Java varsayılan olarak int veri tipi olarak kabul edecek.

Java 7'de eklenen güzel özellikte şudur, eğer ki sayı çok uzun ise bunu daha okunaklı yapabilmek için sayıyı yazarken (_) kullanabiliriz.

int million = 1000000;
int million_2 = 1_000_000;
// _ (underscore) nerelerde kullanılamaz ?
double baslangictaKullanilamaz = _1000.00; // Hata verir.
double sondaKullanilamaz = 1000.00_; // Hata verir.
double noktaIleKullanilamaz = 1000_.00; // Hata verir.
double noktaIleKullanilamaz2 = 1000._00; // Hata verir.

double sinirBozucuAmaCalisir = 1_00_0.0_0; // Çalışır.

Referance Data Types (Referans Veri Tipleri)

Bir nesneye atıfta bulunan veri tipine biz referans veri tipi diyoruz (bir sınıfın instancesi-örneği-nesnesi). Referans veri tipi bir nesneye atıfta bulunur yani primitive tiplerden daha complex verileri tutarlar. Örneğin :

java.util.Date today;
String greeting;

"today" Date tipinin bir referansıdır ve sadece bir Date nesnesini işaret edebilir.

"greeting" bir String tipinin referansıdır ve sadece String nesnesini işaret edebilir.

today = new Date();
greeting = "How are you?";

Unutulmamalıdır ki bizim değişkenlerde nesnelerimizin ismi yoktu yani String yada Date isimli nesnelerimizin ismi yoktur bunlar sadece bunlara uygun olan referanslar (today,greeting) tarafından erişilir.

Bir değeri bir referansa atamak için 2 yolu vardır : 

  1. Eğer ki bir referans diğer referansa atanmak istiyorsa ikisi de aynı tipte olmalıdır. Mesela today'i başka bir değişkene atamak istersek diğeri de java.util.Date tipinde olmalıdır.
  2. "new" keywordünü kullanarak yeni bir nesneye referans atanabilir. Yukarıdaki gibi; new Date() yaptık ya orda da referans'a nesneyi atamış olduk.

Ana farklılıkları 

  • Primitive types bunlar bellekte kendilerine ayrılan değerleri tutarlarken, referanslar değerleri tutmaz, sadece nesnenin bellekteki adresini tutarlar.
  • Referans types bellekte nesnenin bellek adresini tutarlar bu concept'i duymuşusuzdur, pointerlar. Tabi diğer dillerin aksine örneğin C/C++, Java sizin bellekteki physical addres yerini öğrenmenize izin vermez.
  • Referans tipler null olabilirler yani boş kalırlar herhangi bir nesnenin referansını tutmazlarken, primitive types'larda eğer ki null atarsanız compiler otomatikman hata verecektir.
    • int value = null; // Derlemez
      String s = null; // Derler.