1. Senarai jenis primitif

Java mempunyai 8 jenis primitif asas. Ia dipanggil primitif kerana nilai jenis ini bukan objek dan disimpan terus di dalam pembolehubah.

Berikut ialah jadual dengan beberapa maklumat ringkas tentang jenis ini:

taip Saiz
dalam bait
Julat nilai Nilai asal Penerangan
byte 1 -128 .. 127 0 Jenis integer terkecil ialah bait tunggal
short 2 -32,768 .. 32.767 0 Integer pendek, dua bait
int 4 -2*10 9 .. 2*10 9 0 Integer, 4 bait
long 8 -9*10 18 .. 9*10 18 0L Integer panjang, 8 bait
float 4 -10 38 .. 10 38 0.0f Nombor titik terapung, 4 bait
double 8 -10 308 .. 10 308 0.0d Nombor titik terapung berketepatan dua kali, 8 bait
boolean 1 true,false false Jenis Boolean (hanya truedan false)
char 2 0 .. 65.535 '\u0000' Aksara, 2 bait, semuanya lebih besar daripada 0
Nilai asal

By the way, inilah nuansa penting. Jika anda mengisytiharkan pembolehubah contoh (medan) atau pembolehubah kelas statik dan tidak segera memberikan sebarang nilai kepadanya, maka ia dimulakan dengan nilai lalai . Jadual membentangkan senarai nilai ini.

Pembolehubah tempatan dalam kaedah tidak mempunyai nilai lalai. Jika anda tidak memberikan nilai kepada pembolehubah tersebut, ia dianggap tidak dimulakan dan tidak boleh digunakan.

Tetapi mari kita kembali kepada jenis primitif dan melihatnya dengan lebih dekat.



2. Jenis integer

Java mempunyai 4 jenis integer: byte, short, intdan long. Mereka berbeza dalam saiz dan julat nilai yang boleh disimpan.

inttaip

Yang paling biasa digunakan ialah intjenis. Nama itu berasal daripada perkataan int eger (nombor bulat). Semua literal integer (nombor bulat) dalam kod adalah ints(jika ia tidak berakhir dengan L, F, atau D).

Pembolehubah jenis ini boleh mengambil nilai dari -2,147,483,648hingga +2,147,483,647.

Itu banyak dan mencukupi untuk hampir setiap kesempatan. Hampir setiap fungsi yang mengembalikan nombor mengembalikan int.

Contoh:

Kod Penjelasan
int n = "String".length();
Kaedah length()mengembalikan panjang rentetan
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
Medan lengthmengandungi panjang tatasusunan.

shorttaip

Jenis shortmendapat namanya daripada short int. Ia juga sering dipanggil integer pendek . Tidak seperti intjenis, panjangnya hanya dua bait dan julat nilai yang mungkin adalah dari -32,768hingga +32,767.

Ini bermakna anda tidak boleh menyimpan nombor satu juta di dalamnya. Atau 50,000. Ini adalah jenis integer yang paling jarang digunakan di Jawa. Motivasi utama untuk menggunakannya adalah untuk memelihara ingatan.

Katakan anda mempunyai situasi di mana anda tahu lebih awal bahawa anda akan bekerja dengan nilai yang tidak pernah melebihi 30,000, dan akan terdapat berjuta-juta nilai ini.

Sebagai contoh, katakan anda sedang menulis aplikasi yang memproses gambar definisi ultra tinggi yang menggunakan 10-bit setiap warna. Dan anda mempunyai sejuta piksel dalam gambar anda. Ini adalah senario di mana keputusan untuk menggunakan intatau shortpenting.

longtaip

Jenis ini mendapat namanya daripada long intdan juga dipanggil integer panjang . Tidak seperti intjenis, ia mempunyai julat nilai yang sangat besar: dari hingga .-9*1018+9*1018

Mengapa ia bukan jenis integer asas?

Kerana Java muncul pada pertengahan 90-an, apabila kebanyakan komputer adalah 32-bit. Ini bermakna semua pemproses telah dioptimumkan untuk bekerja dengan nombor yang terdiri daripada 32 bit. Pemproses boleh berfungsi dengan integer 64-bit, tetapi operasi dengan mereka adalah lebih perlahan.

Akibatnya, pengaturcara secara munasabah memutuskan untuk membuat intjenis integer standard, dan menggunakan longjenis itu hanya apabila benar-benar perlu.

bytetaip

Ini adalah jenis integer terkecil di Jawa, tetapi jauh daripada yang paling kurang digunakan. Namanya, byte, juga merupakan perkataan untuk blok ingatan terkecil yang boleh dialamatkan di Jawa.

Tidak banyak nilai yang sah untuk bytejenis: dari -128hingga +127. Tetapi itu bukan kekuatannya. Jenis ini bytepaling kerap digunakan apabila anda perlu menyimpan data gumpalan besar dalam ingatan. Tatasusunan bytes sesuai untuk tujuan ini.

Katakan anda perlu menyalin fail di suatu tempat.

Anda tidak perlu memproses kandungan fail: anda hanya mahu mencipta kawasan memori (penampan), salin kandungan fail ke dalamnya, dan kemudian tulis data itu daripada penimbal ke fail lain. Array byteadalah apa yang anda perlukan untuk ini.

Perlu diingat bahawa pembolehubah tatasusunan hanya menyimpan rujukan kepada kawasan memori. Apabila pembolehubah dihantar ke beberapa kaedah, hanya alamat memori yang diluluskan. Blok memori itu sendiri tidak disalin.

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. Jenis sebenar

Jenis primitif termasuk dua jenis untuk nombor nyata. Walaupun tidak tepat sepenuhnya untuk menggunakan istilah itu. Apabila komputer mengendalikan nombor nyata, kami memanggilnya nombor terapung . Nama itu berasal daripada piawai untuk mewakili nombor, di mana bahagian integer dan pecahan nombor dipisahkan oleh noktah (titik, bukan koma).

Beberapa maklumat berguna:

Setiap negara mempunyai piawaian tersendiri untuk menulis nombor (kejutan!).

Ramai orang terbiasa menggunakan noktah untuk memisahkan ribuan dan koma sebagai pemisah perpuluhan: contohnya, mereka akan menulis one million ones and 153 thousandthssebagai 1.000.000,153. Tetapi di Amerika Syarikat, tempat pencipta Java tinggal, standard yang berbeza telah diterima pakai:1000000.153

Java mempunyai dua jenis primitif titik terapung: doubledan float.

Seperti yang kami katakan sebelum ini, jenis ini mempunyai susunan dalaman yang sangat spesifik: sebenarnya, di dalam setiap pembolehubah jenis ini bukan satu nombor, tetapi dua:

Sebagai contoh, nombor titik terapung 987654.321boleh diwakili sebagai . Kemudian dalam ingatan ia akan diwakili sebagai dua nombor ( mantissa , iaitu bahagian penting nombor) dan ( eksponen , iaitu kuasa sepuluh)0.987654321*1069876543216

floattaip

Nama floatjenis berasal daripada nombor titik ing terapung . Saiz jenis ini agak kecil — hanya 4 bait (32 bit) — tetapi ia boleh menyimpan nilai dari hingga . 24 bit diperuntukkan untuk mewakili mantissa, dan 8 bit untuk eksponen. Jenis ini mampu menyimpan hanya 8 digit bererti.-3.4*10383.4*1038

Pendekatan ini memungkinkan untuk menyimpan nombor yang jauh lebih besar daripada int, sambil menggunakan 4 bait yang sama. Tetapi untuk berbuat demikian, kami mengorbankan ketepatan. Kerana sebahagian daripada memori menyimpan mantissa, pembolehubah ini hanya menyimpan 6-7 tempat perpuluhan manakala selebihnya dibuang.

Contoh:

Kod Nilai
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

Seperti yang anda lihat, kelemahan utama jenis ini ialah bilangan digit bererti yang sangat kecil, dan kehilangan ketepatan sebaik sahaja digit kelapan. Itulah sebabnya floatjenis ini tidak begitu popular di kalangan pengaturcara Java.

doubletaip

Jenisnya doubleialah jenis titik terapung standard. Nama itu berasal daripada nombor titik terapung berketepatan ganda . Semua literal sebenar ialah doubles secara lalai.

Jenis ini menggunakan 8 bait memori (64 bit) dan boleh menyimpan nilai dari hingga . Perkara penting yang perlu diketahui ialah 53 bit diperuntukkan untuk mantissa, manakala baki 11 adalah untuk eksponen.-1.7*103081.7*10308

Ini membolehkan 15-17 digit penting disimpan.

Contoh:

Kod Nilai
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

Ketepatan ini, terutamanya jika dibandingkan dengan floatjenis, adalah penentu: 99% daripada semua operasi dengan nombor nyata dilakukan menggunakan doublejenis tersebut.

11bit diperuntukkan untuk eksponen, yang bermaksud anda boleh menyimpan kuasa sepuluh dari -323hingga +308(itu kuasa dua dari -1024hingga +1023). Jenis ini doubleboleh menyimpan nombor dengan ratusan sifar dengan mudah selepas titik perpuluhan:

Kod Nilai
double a = 2E-300 * 3E+302
600.0


4. Infiniti

Nombor titik terapung mempunyai satu lagi ciri menarik: ia boleh menyimpan nilai khas yang menandakan infiniti . Dan anda boleh mewakili infiniti positif dan infiniti negatif .

Contoh:

Kod Catatan
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

Jika infiniti didarab dengan nombor, anda mendapat infiniti. Jika anda menambah nombor kepada infiniti, anda mendapat infiniti. Itu sangat mudah.

Bukan nombor ( NaN)

Sebarang operasi yang melibatkan infiniti menghasilkan infiniti. Nah, kebanyakan tetapi bukan semua.

Nombor titik terapung boleh menyimpan nilai istimewa lain: NaN. Ia adalah singkatan untuk N ot a N umber (bukan nombor).

Dalam matematik, jika anda membahagikan infiniti dengan infiniti, hasilnya tidak ditentukan.

Tetapi, di Jawa, jika anda membahagikan infiniti dengan infiniti, hasilnya ialah NaN.

Contoh:

Kod Catatan
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

Sebarang operasi dengan NaNhasil NaN.



5. charjenis

Di antara jenis primitif Javachar , seseorang memerlukan perhatian khusus: jenis. Namanya berasal daripada perkataan char acter , dan jenis itu sendiri digunakan untuk menyimpan aksara.

Watak ialah rentetan yang diperbuat daripada apa, bukan? Rentetan ialah susunan aksara.

Tetapi yang lebih menarik ialah hakikat bahawa charjenis itu juga merupakan jenis angka ! Ia adalah jenis dwi-tujuan, boleh dikatakan.

Realitinya ialah charjenis itu sebenarnya bukan watak. Sebaliknya, ia menyimpan kod aksara daripada pengekodan Unicode. Setiap aksara sepadan dengan nombor: kod angka watak itu.

Setiap charpembolehubah menduduki dua bait dalam ingatan (sama dengan jenisnya short). Tetapi tidak seperti shortjenis, charjenis integer tidak ditandatangani dan boleh menyimpan nilai dari 0hingga 65,535.

Jenisnya charadalah jenis hibrid. Nilainya boleh ditafsirkan sebagai nombor (cthnya boleh ditambah dan didarab) dan sebagai aksara. Ini dilakukan kerana walaupun aksara adalah representasi visual, bagi komputer ia adalah di atas semua hanya nombor. Dan lebih mudah untuk bekerja dengan mereka sebagai nombor.

Unicode

Unicode ialah jadual khas (pengekodan) yang mengandungi semua aksara di dunia. Dan setiap watak mempunyai nombor sendiri. Ia kelihatan lebih kurang seperti ini:

Jenis primitif di Jawa

Terdapat cara yang berbeza untuk menetapkan nilai kepada charpembolehubah.

Kod Penerangan
char a = 'A';
Pembolehubah aakan mengandungi huruf Latin A.
char a = 65;
Pembolehubah aakan mengandungi huruf Latin A. Kodnya ialah 65.
char a = 0x41;
Pembolehubah aakan mengandungi huruf Latin A.
Kodnya ialah 65, yang sama 41dalam sistem perenambelasan.
char a = 0x0041;
Pembolehubah aakan mengandungi huruf Latin A.
Kodnya ialah 65, yang sama 41dalam sistem perenambelasan.
Dua sifar tambahan tidak mengubah apa-apa.
char a = '\u0041';
Pembolehubah aakan mengandungi huruf Latin A.
Satu lagi cara untuk menentukan watak dengan kodnya.

Selalunya, orang hanya menunjukkan watak dalam tanda petikan (seperti dalam baris pertama jadual). Yang berkata, kaedah terakhir juga popular. Kelebihannya ialah ia boleh digunakan dalam rentetan.

Dan seperti yang kami katakan, charjenis itu juga merupakan jenis integer, jadi anda boleh menulis sesuatu seperti ini:

Kod Output konsol
char a = 'A';
a++;
System.out.println(a);
Huruf Latin Bakan dipaparkan pada skrin.
Kerana:
A65
B66
C67

Bekerja dengan chars

Setiap satu charadalah pertama sekali nombor (kod aksara), dan kemudian aksara. Jika anda mengetahui kod aksara, anda sentiasa boleh mendapatkan watak dalam program anda. Contoh:

Kod Output konsol
char c = (char) 1128;
System.out.println(c);

Ѩ

Kod standard

Berikut ialah kod aksara yang paling terkenal:

Watak Kod
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. booleanjenis

Dan jenis primitif yang terakhir ialah boolean.

Seperti yang anda sedia maklum, ia hanya boleh mengambil dua nilai: truedan false.

Dan dengan itu, anda sudah tahu semua yang perlu diketahui tentang jenis ini.