Merhaba arkadaşlar,
Bu yazıda Java’da veri tipleri konusunda değineceğim. Eğer Java diline veya herhangi bir dilde programlamaya yeni başladıysanız bu makalenin ardından hemen Sabitler, Değişkenler ve Java’da Kullanılan Anahtar Kelimeler başlıklı makaleyi okumanızı öneririm. Bu makalede yazdığım örnekleri anlamanıza yardımcı olacak temel bilgileri edinmezseniz okuyacaklarınız havada kalacak ve bir süre sonra unutacaksınız.
Veri tipleri değişken tanımlarken değişken içinde saklayacağımız veriyi belirlemek için kullanılır. Kolay anlaşılması açısından örnek verecek olursak; adımızı ve soyadımızı sayısal veri tiplerinde saklayamayız. Veya üzerinde matematiksel işlemler yapacağımız verileri metin tipinde saklayamayız. En başta bu örneği verirsek yanlış olmaz. Bu basit sebebin dışında teknik açıdan bakacak olursak verilerin doğru işlenmesi, işlenirken işlemciyi veya diğer donanımları gereğinden fazla meşgul etmemesi veya amacımız ve ihtiyacımızın dışında işlemler yapıp farklı sonuçlar doğurmaması için veri tiplerine ihtiyacımız var ve onları doğru şekilde kullanmayı bilmeliyiz.
Java’da İlkel (Primitive) ve Referans (Reference) adında 2 grup veri tipi vardır.
İlkel Tipler
Toplam 9 adet ilkel tip vardır. Aşağıdaki tablodan kısaca bilgi edinebilirsiniz.
Tip Adı |
Varsayılan Değer |
Boyut |
Başlangıç Değeri |
Bitiş Değeri |
byte |
0 |
8 bit |
-128 |
127 |
short |
0 |
16 bit |
-215 (-32768) |
215-1 (32767) |
int |
0 |
32 bit |
-231 (-2147483648) |
231-1 (2147483647) |
long |
0 |
64 bit |
-263 (-9223372036854775808) |
263-1 (9223372036854775807) |
float |
0.0f |
32 bit |
2-149 |
(2-2-23)·2127 |
double |
0.0d |
64 bit |
2-1074 |
(2-2-52)·21023 |
char |
\u0000 |
16 bit |
0 |
216-1 |
boolean |
false |
1 bit |
false |
True |
Not: Sayısal veri tiplerinde baştaki ilk bit işaret biti olarak kullanılır.
byte: Küçük sayılar saklamak için kullanılır. 8 bitten oluşur. -128 ile 127 arasında tamsayı saklayabilir. Varsayılan değeri 0’dır.
short: Byte’a göre biraz daha büyük sayılar için kullanılır. 16 bitten oluşur.
int: 32 bitten oluşur ve -2 milyar ile +2 milyar arasındaki sayılar için kullanılır. Bilinçsizce orta ölçekli yazılımlarda çokça kullanıldığı görülmektedir.
long: 64 bitten oluşur. Tamsayı cinsinden en büyük veri tipidir. Yazılırken değerin sonuna L yazılması zorunludur. L yazılmazsa int tipinde algılanır. int tipinde algılanırsa 2 ihtimal doğar. Eğer sayı int tipine uygun bir büyüklükteyse siz farkına bile varmadan hata vermeden çalışmaya devam eder. Eğer int tipinin aralığından büyük veya küçük bir sayı ise “Error:(x, y) java: integer number too large: 10000000000” şeklinde hata verir.
Not: JavaSE 7 ve sonrasında sayısal veri tiplerinde “_” (altçizgi) kullanılabilmektedir.
float: 32 bitten oluşan ondalıklı veri tipidir. Küçük sayılarda sonunda f koymak zorunlu değildir ama büyük sayılarda koyulması gerekmektedir. Sayının sonuna f koyulmadığı zaman long’da olduğu gibi hata verir.
double: 64 bitten oluşan ondalıklı veri tipidir. Çok büyük sayılar için kullanılır. float veri tipinde olduğu gibi küçük sayılarda sonuna d koyulmasa da olur ama büyüklerde koyulması zorunludur. double veri tipi float veri tipinden daha büyük olduğu için double tanımlarken sonuna f koysanız sayı float veri tipinin gerekli aralığına girdiği sürece hata vermez.
Not: Java float ve double veri tipleri için IEEE 754 standardını kullanır.
char: 16 bit uzunluğundadır ve sadece tek bir karakter barındırabilir. Harf, sayı, nokta, yıldız, tilda, artı işareti vb. herhangi bir karakteri barındırabilir. Değer atanırken tek tırnak içinde yazılması zorunludur.
boolean: 1 bit uzunluğunda sadece true veya false değerlerini alabilen veri tipidir.
Referans Tipler
Temelde 3 tane referans tip vardır. Bu 3 temel tip kendi altlarında farklı tipler barındırır.
Tip Adı |
Varsayılan Değer |
Class |
null |
Array |
null |
Interface |
null |
Konumuz veri tipleri olduğu için şimdilik sadece ilkel veri tiplerinin referans tiplerdeki karşılıklarına değineceğim.
İlkel Hali | Referans Hali |
byte | Byte |
char | Character |
short | Short |
int | İnt |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
– | Void |
Not: Void (ya da void) bir veri tipi değildir. İlkel veri tiplerinde void yokken referans veri tiplerinde Void adında bir sınıf var. Sınıfın var olması bu tipi kullanabileceğimiz anlamına gelmiyor. Oracle firmasının bu linkteki açıklamasını okumanızı öneririm.
Note that the Java programming language does not allow a “cast to void” – void is not a type – so the traditional C trick of writing an expression statement such as:
1 (void)... ; // incorrect!
Veri tiplerinin açıklamasını yukarıda yaptığım için tekrardan hepsi için yeni bir açıklama yapmayacağım. Şimdi her veri tipi için bir örnek yapıp bilgilerimizi pekiştirelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public class Main { public static void main(String[] args) { byte byte_1 = 13; Byte byte_2 = new Byte((byte) 27); Byte byte_3 = new Byte(27); // Hatalı ! - Cannot resolve constructor Byte(int) char char_1 = 'c'; Character char_2 = new Character('C'); Character char_3 = 'C'; short short_1 = 17548; Short short_2 = new Short((short) 27846); Short short_3 = new Short(27846); // Hatalı ! - Cannot resolve constructor Short(int) Short short_4 = 31361; int int_1 = 1747843247; Integer int_2 = new Integer(1548765932); Integer int_3 = 235345436; long long_1 = 6245872548753215427L; Long long_2 = new Long(445235683458275477L); Long long_3 = new Long(445235683458275477); // Hatalı ! - Integer number too large Long long_4 = 2356278345693476523L; float float_1 = 5.283974F; Float float_2 = new Float(9.1234235345345f); Float float_3 = new Float(2.32423423); Float float_4 = 8.2354287394729384723f; double double_1 = 534.46545D; Double double_2 = new Double(34534534.345345345345D); Double double_3 = 5465756425243.456764445234234234d; boolean boolean_1 = false; Boolean boolean_2 = new Boolean(true); Boolean boolean_3 = true; } } |
Gördüğünüz gibi her veri tipinden bir örnek yaptık. Dikkat ettiyseniz eğer referans veri tiplerini oluştururken "new"
anahtar kelimesini kullandık. İlkel veri tiplerinin referans tipindeki karşılıkları sınıf olduğu için oluşturulurken eşittir işaretinden sonra “new” yazmamız gerekiyor. Bu konuya sınıflar konusunu işlerken daha sonra değineceğiz (Makaleyi yazdıktan sonra burada link vereceğim).
Not: Float, Double, Long sayılarından sonra koymamız gereken harfler büyük veya küçük olabilir. Tamamen sizin tercihinize kalmış durumda.
Not: Eğer bir sayı float sınırları içindeyse tanımlama sırasında o sayının sonuna "f"
koymanıza gerek yoktur. Derleyici otomatik olarak onun float olduğunu anlayacak ve hata vermeyecektir.
Örnekleri verirken bilerek hatalı bazı örnekler de yazdım. Aklınıza “Bazı sınıfları doğrudan değer vererek tanımlarken neden bazılarını tip dönüşümü yaptıktan sonra tanımlayabiliyoruz ?” diye bir soru takılmış olabilir. Hiç bekletmeden hemen cevabını vereyim. Hata mesajında açıkça sebebini söylenmiş aslında. Hata mesajlarında derleyici bize gelen sayının hangi tipte olup olmadığını anlayamadığını söylüyor. Biz herhangi bir tam sayı yazdığımızda derleyici onu otomatik olarak int tipinde algılıyor. int tipinin sınırları byte ve short tipini çok aştığı için bizden dönüştürerek vermemizi istiyor.
Veri tiplerini öğrendiğimize göre bilmemiz gereken bir konu daha çıktı. Tanımladığımız değişkenler bellekte nerede saklanıyor ? İlkel tipler belleğin stack kısmında, referans tipler ise heap kısmında saklanır.
Aklınıza takılan bir soru olursa yorum yazarak veya iletişim kısmından mail yazarak sorularınızı iletebilirsiniz. Gerekli gördüğüm taktirde daha farklı örnekler de ekleyerek makaleyi güncelleyebilirim.
Faydalı olması dileğiyle..
Emeğinize sağlık teşekkürler.
Referans tipler için verdiğiniz örnekler hata veriyor hocam.
Byte byte_2 = new Byte((byte) 27); //bu şekildeki tanımlamalara kızıyor.