1. İlkel türlerin listesi

Java'nın 8 temel ilkel türü vardır. İlkel olarak adlandırılır çünkü bu türlerin değerleri nesne değildir ve doğrudan değişkenlerin içinde depolanır.

İşte bu türler hakkında bazı kısa bilgiler içeren bir tablo:

Tip
Bayt cinsinden boyut
Değer aralığı Varsayılan değer Tanım
byte 1 -128 .. 127 0 En küçük tamsayı türü tek bir bayttır
short 2 -32.768 .. 32.767 0 Kısa tamsayı, iki bayt
int 4 -2*10 9 .. 2*10 9 0 Tamsayı, 4 bayt
long 8 -9*10 18 .. 9*10 18 0L Uzun tamsayı, 8 bayt
float 4 -10 38 .. 10 38 0.0f Kayan noktalı sayı, 4 bayt
double 8 -10 308 .. 10 308 0.0d Çift duyarlıklı kayan nokta sayısı, 8 bayt
boolean 1 true,false false Boole türü (yalnızca trueve false)
char 2 0 .. 65.535 '\u0000' Karakterler, 2 bayt, tümü 0'dan büyük
Varsayılan değer

Bu arada, işte önemli bir nüans. Bir örnek değişken (alan) veya bir statik sınıf değişkeni bildirir ve ona hemen herhangi bir değer atamazsanız, varsayılan bir değerle başlatılır . Tablo, bu değerlerin bir listesini sunar.

Bir yöntemdeki yerel değişkenlerin varsayılan değeri yoktur. Bu tür değişkenlere bir değer atamazsanız, başlatılmamış kabul edilirler ve kullanılamazlar.

Ama ilkel türlere geri dönelim ve onlara daha yakından bakalım.



2. Tam sayı türleri

Java'nın 4 tamsayı türü vardır : byte, shortve int. longBoyutları ve saklayabilecekleri değer aralığı bakımından farklılık gösterirler.

inttip

En sık kullanılan tiptir int. İsim int eger (tam sayı) kelimesinden gelir . Koddaki tüm tamsayı hazır değerleri (tam sayılar) (eğer bir , veya intsile bitmiyorsa ).LFD

-2,147,483,648Bu türdeki değişkenler ile arasında değerler alabilir +2,147,483,647.

Bu çok fazla ve neredeyse her durum için yeterli. Bir sayı döndüren hemen hemen her işlev bir int.

Örnekler:

kod Açıklama
int n = "String".length();
Yöntem length(), bir dizenin uzunluğunu döndürür
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
Alan length, dizinin uzunluğunu içerir.

shorttip

Tür short, adını short int. Genellikle kısa tamsayı olarak da adlandırılır . Türün aksine int, uzunluğu yalnızca iki bayttır ve olası değerlerin aralığı ile -32,768arasındadır +32,767.

Bu, içinde bir milyon rakamı saklayamayacağınız anlamına gelir. Hatta 50.000. Bu, Java'da en nadiren kullanılan tamsayı türüdür. Bunu kullanmanın ana motivasyonu hafızayı korumaktır.

Asla 30.000'i geçmeyen değerlerle çalışacağınızı ve bu değerlerden milyonlarca olacağını önceden bildiğiniz bir durum olduğunu varsayalım.

10Örneğin, renk başına -bit kullanan ultra yüksek tanımlı resimleri işleyen bir uygulama yazdığınızı varsayalım . Ve resminizde bir milyon piksel var. Bu, kullanma kararının önemli olduğu bir intsenaryodur short.

longtip

Bu tür, adını bir uzun tamsayıdan alır ve aynı zamanda uzun bir tamsayılong int olarak da adlandırılır . Türün aksine , inanılmaz derecede muazzam bir değer aralığına sahiptir: from to .int-9*1018+9*1018

Neden temel tamsayı türü değil?

Çünkü Java, çoğu bilgisayarın 32 bit olduğu 90'ların ortalarında ortaya çıktı. Bu, tüm işlemcilerin 32 bitten oluşan sayılarla çalışacak şekilde optimize edildiği anlamına gelir. İşlemciler 64 bitlik tamsayılarla çalışabilir, ancak onlarla yapılan işlemler daha yavaştı.

Sonuç olarak, programcılar makul bir şekilde standart tamsayı tipini oluşturmaya intve bu tipi yalnızca gerçekten gerekli olduğunda kullanmaya karar verdiler long.

bytetip

Bu, Java'daki en küçük tamsayı türüdür, ancak en az kullanılandan uzaktır. Adı, byteaynı zamanda Java'daki adreslenebilir en küçük bellek bloğunun sözcüğüdür.

bytefrom -128to türü için çok fazla geçerli değer yok +127. Ama bu onun gücü değil. Tür byte, çoğunlukla büyük bir blob verisini bellekte depolamanız gerektiğinde kullanılır. Bir s dizisi bytebu amaç için idealdir.

Diyelim ki bir dosyayı bir yere kopyalamanız gerekiyor.

Dosyanın içeriğini işlemeniz gerekmez: sadece bir bellek alanı (arabellek) oluşturmak, dosyanın içeriğini buraya kopyalamak ve ardından bu verileri arabellekten başka bir dosyaya yazmak istiyorsunuz. Bunun için ihtiyacınız olan şey bir bytedizidir.

Bir dizi değişkeninin yalnızca bir bellek alanına başvuru sakladığını unutmayın. Değişken bir yönteme geçirildiğinde, yalnızca bellek adresi iletilir. Bellek bloğunun kendisi kopyalanmaz.

byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
   int size = sourceFile.read(buffer); // Read data from a file into a buffer
   destFile.write(buffer, 0, size); // Write data from the buffer to a file

   // Stop copying if the buffer is not full
   if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();


3. Gerçek tipler

İlkel türler, gerçek sayılar için iki tür içerir. Bu terimi kullanmak tamamen doğru olmasa da. Bilgisayarlar gerçek sayıları ele aldığında onlara kayan noktalı sayılar diyoruz . Ad, bir sayının tamsayı ve kesirli bölümlerinin bir noktayla (virgül değil, nokta) ayrıldığı sayıları temsil eden bir standarttan gelir.

Bazı yararlı bilgiler:

Her ülkenin sayıları yazmak için kendi standartları vardır (sürpriz!).

one million ones and 153 thousandthsBirçok kişi, binleri ayırmak için nokta ve ondalık ayırıcı olarak virgül kullanmaya alışkındır: örneğin, olarak yazarlardı 1.000.000,153. Ancak Java'nın yaratıcılarının yaşadığı Amerika Birleşik Devletleri'nde farklı bir standart benimsendi:1000000.153

Java'nın iki kayan nokta ilkel türü vardır: doubleve float.

Daha önce de söylediğimiz gibi, bu türlerin çok özel bir iç düzenlemesi vardır: Aslında bu türlerin her değişkeninin içinde bir sayı değil, iki tane vardır:

Örneğin, kayan noktalı sayı 987654.321olarak temsil edilebilir . Daha sonra bellekte iki sayı ( mantis , yani sayının önemli kısmı) ve ( üs , yani on'un kuvveti) olarak temsil edilecektir.0.987654321*1069876543216

floattip

Türün adı kayan nokta numarasındanfloat gelir . Bu türün boyutu oldukça küçüktür — yalnızca 4 bayttır (32 bit) — ancak ile arasındaki değerleri depolayabilir . Mantisi temsil etmek için 24 bit ve üssü temsil etmek için 8 bit tahsis edilir. Bu tür, yalnızca 8 önemli basamak saklayabilir.-3.4*10383.4*1038

intBu yaklaşım , aynı 4 baytı kullanırken bir 'den çok daha büyük sayıları depolamayı mümkün kılar . Ancak bunu yapmak için doğruluktan ödün veriyoruz. Hafızanın bir kısmı mantisayı sakladığından, bu değişkenler sadece 6-7 ondalık haneyi saklarken geri kalanı atılır.

Örnek:

kod Değer
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

Gördüğünüz gibi, bu türün ana dezavantajı, çok az sayıda önemli basamak ve sekizinci basamakta kesinlik kaybıdır. Bu nedenle floattür, Java programcıları arasında pek popüler değildir.

doubletip

Tip double, standart kayan nokta tipidir. Ad, çift duyarlıklı kayan noktalı sayıdan gelir . Tüm gerçek hazır değerler doublevarsayılan olarak s'dir.

Bu tür, 8 bayt bellek (64 bit) kaplar ve ile arasındaki değerleri depolayabilir . Bilinmesi gereken önemli bir şey, mantis için 53 bit, kalan 11 bit ise üs için ayrılmıştır.-1.7*103081.7*10308

Bu, 15-17 önemli basamağın saklanmasına izin verir.

Örnek:

kod Değer
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

Bu kesinlik, özellikle tipe kıyasla floatbelirleyicidir: Gerçek sayılarla yapılan tüm işlemlerin %99'u doubletip kullanılarak gerçekleştirilir.

11-323bitler üs için tahsis edilir, bu da from'dan to'ya kadar on'luk kuvvetleri depolayabileceğiniz anlamına gelir (bu, from to'dan +308ikinin kuvvetidir ). Tür , ondalık noktadan sonra yüzlerce sıfır içeren bir sayıyı kolayca saklayabilir:-1024+1023double

kod Değer
double a = 2E-300 * 3E+302
600.0


4. Sonsuzluk

Kayan noktalı sayıların bir başka ilginç özelliği daha vardır: sonsuzu ifade eden özel bir değer saklayabilirler . Ve pozitif sonsuzu ve negatif sonsuzu temsil edebilirsiniz .

Örnekler:

kod Not
System.out.println( 100.0 / 0.0 );
Infinity
System.out.println( -100.0 / 0.0 );
-Infinity
double a = 1d / 0d;
double b = a * 10;
double c = b - 100;
a == Infinity
b == Infinity
c == Infinity

Sonsuzluk bir sayı ile çarpılırsa sonsuzluk elde edilir. Sonsuza bir sayı eklerseniz, sonsuz elde edersiniz. Bu çok uygun.

Sayı değil ( NaN)

Sonsuzluğu içeren herhangi bir işlem sonsuzluğu verir. Hepsi olmasa da çoğu.

Kayan noktalı sayılar başka bir özel değeri saklayabilir: NaN. N ot a N umber (sayı değil) ifadesinin kısaltmasıdır .

Matematikte sonsuzu sonsuza bölerseniz sonuç tanımsızdır.

Ancak, Java'da sonsuzluğu sonsuza bölerseniz, sonuç NaN.

Örnekler:

kod Not
System.out.println(0.0 / 0.0);
NaN
double infinity = 1d / 0d;
System.out.println(infinity / infinity);

NaN
double a = 0.0 / 0.0;
double b = a * 10;
double c = b - 100;
double d = a + infinity;
a == NaN
b == NaN
c == NaN
d == NaN

NaNGetirili herhangi bir işlem NaN.



5. chartip

Java'nın ilkel türleri arasında , biri özel ilgiyi hak ediyor: tür char. Adı char acter kelimesinden gelir ve türün kendisi karakterleri depolamak için kullanılır.

Karakterler, dizelerin yapıldığı şeydir, değil mi? Dizeler bir karakter dizisidir.

Ama daha da ilginç olanı, türün charaynı zamanda sayısal bir tür olması ! Bu, tabiri caizse çift amaçlı bir tür.

Gerçek şu ki, chartip aslında karakter değil. Bunun yerine, Unicode kodlamasından karakter kodlarını saklar . Her karakter bir sayıya karşılık gelir: karakterin sayısal kodu.

Her chardeğişken bellekte iki bayt yer kaplar (tür ile aynı short). Ancak shorttürün aksine, chartamsayı türü işaretsizdir ve 0ile arasındaki değerleri depolayabilir 65,535.

Tip char, hibrit bir tiptir. Değerleri hem sayı olarak (örn. toplanabilir ve çarpılabilir) hem de karakter olarak yorumlanabilir. Bu, karakterlerin görsel temsiller olmasına rağmen, bir bilgisayar için her şeyden önce sadece sayılar olduğu için yapıldı. Ve onlarla sayı olarak çalışmak çok daha uygun.

Unicode

Unicode, dünyadaki tüm karakterleri içeren özel bir tablodur (kodlama). Ve her karakterin kendi numarası vardır. Yaklaşık olarak şuna benziyor:

Java'daki ilkel türler

Bir değişkene değer atamanın farklı yolları vardır char.

kod Tanım
char a = 'A';
Değişken aLatin harfini içerecektir A.
char a = 65;
Değişken aLatin harfini içerecektir A. Onun kodu 65.
char a = 0x41;
Değişken aLatin harfini içerecektir A.
Kodu , onaltılık sistemde 65eşittir .41
char a = 0x0041;
Değişken aLatin harfini içerecektir A.
Kodu , onaltılık sistemde 65eşittir . Fazladan iki sıfır hiçbir şeyi değiştirmez. 41
char a = '\u0041';
Değişken aLatin harfini içerecektir A.
Bir karakteri koduyla tanımlamanın başka bir yolu.

Çoğu zaman, insanlar karakteri tırnak içinde belirtirler (tablonun ilk satırında olduğu gibi). Bununla birlikte, ikinci yöntem de popülerdir. Avantajı, dizilerde kullanılabilmesidir.

Ve dediğimiz gibi, chartip aynı zamanda bir tamsayı tipidir, yani şöyle bir şey yazabilirsiniz:

kod Konsol çıkışı
char a = 'A';
a++;
System.out.println(a);
Latin harfi Bekranda görüntülenecektir.
Çünkü:
A65
B66
C67

chars ile çalışmak

Her biri, charher şeyden önce bir sayıdır (karakter kodu), sonra bir karakterdir. Bir karakter kodunu biliyorsanız, karakteri programınızda her zaman alabilirsiniz. Örnek:

kod Konsol çıkışı
char c = (char) 1128;
System.out.println(c);

Ѩ

standart kodlar

İşte en iyi bilinen karakter kodları:

Karakterler Kodlar
0, 1, 2, ...9 48, 49, 50, ...57
a, b, c, ...z 97, 98, 99, ...122
A, B, C, ...Z 65, 66, 67, ...90


6. booleantip

Ve son ilkel tür boolean.

Bildiğiniz gibi, yalnızca iki değer alabilir: trueve false.

Ve bununla, bu tür hakkında bilinmesi gereken her şeyi zaten biliyorsunuz.