1. Integerkelas
Integerjuga bagus kerana ia adalah kelas, yang bermaksud ia boleh mempunyai medan dan kaedah. Dan, sudah tentu, ia mempunyai mereka. Banyak daripada mereka - berpuluh-puluh daripada mereka. Di sini kita akan mempertimbangkan yang paling asas.
Kelas Integermempunyai dua medan yang mengandungi nilai maksimum dan minimum yang mungkin bagi intjenis:
| Padang | Penerangan |
|---|---|
|
Nilai maksimum jenis yang intmungkin |
|
Nilai minimum jenis yang intmungkin |
Kadangkala anda ingin menetapkan intnilai terkecil atau terbesar yang mungkin kepada pembolehubah. Untuk mengelakkan kekacauan kod anda dengan pemalar yang tidak dapat difahami, anda boleh menulis ini dengan jelas seperti berikut:
| Kod | Penerangan |
|---|---|
|
|
Kelas ini Integerjuga mempunyai beberapa kaedah yang menarik. Di sini mereka:
| Kaedah | Penerangan |
|---|---|
|
Mengembalikan rentetan yang merupakan perwakilan heksadesimal bagi nombor tersebut |
|
Mengembalikan rentetan yang merupakan perwakilan binari nombor |
|
Mengembalikan rentetan yang merupakan perwakilan perlapanan bagi nombor |
|
Membungkus yang diluluskan intdalam Integerobjek |
|
Mengembalikan nombor yang diperoleh daripada rentetan yang diluluskan |
Anda pernah menemui Integer.parseInt()kaedah statik. Mari kita ingat bagaimana ia berfungsi:
int name = Integer.parseInt(string);
Jika rentetan yang mengandungi nombor (digit sahaja) dihantar ke parseInt()kaedah, ia akan menghuraikan rentetan dan mengembalikan nombor yang terkandung di dalamnya.
Kaedah selebihnya juga berguna. Sebagai contoh, sesetengah daripada mereka boleh menukar nombor yang diluluskan kepada rentetan yang mengandungi perwakilan perduaan, perlapanan atau perenambelasan nombor itu.
2. Doublekelas
Secara umum, Doublekelas adalah serupa dengan Integerkelas, hanya ia membalut a doubledan bukannya int. Ia juga mempunyai bidang dan kaedah yang akan menarik minat kita. Pertimbangkan beberapa daripada mereka:
Kelas ini Doublemempunyai enam bidang yang menarik:
| Padang | Penerangan |
|---|---|
|
Infiniti negatif |
|
Infiniti positif |
|
eksponen minimum yang mungkin (2 x ) |
|
Eksponen maksimum yang mungkin (2 x ) |
|
Nilai minimum jenis yang doublemungkin |
|
Nilai maksimum jenis yang doublemungkin |
Infiniti
Jika anda membahagi -1.0dengan 0.0, anda mendapat infiniti negatif. Jika anda membahagi 1.0dengan 0.0, anda mendapat infiniti positif. Anda bukan sahaja boleh membahagikan doubledengan sifar, tetapi anda juga boleh menggunakannya untuk menyimpan hasil operasi ini.
Eksponen bagi adouble
Memahami eksponen adalah mudah. Secara dalaman, rangkap dua terdiri daripada mantissa dan eksponen. Tetapi di sini nilai eksponen bukan , tetapi . Oleh itu, jika eksponen meningkat sebanyak , jumlah nilai nombor itu akan berganda.10x2x1
MIN_EXPONENT == -1024, yang bermaksud , yang lebih kurang sama dengan2-102410-308
Dan sudah tentu, Doublekelas mempunyai kaedah yang menarik:
| Kaedah | Penerangan |
|---|---|
|
Mengembalikan rentetan yang merupakan perwakilan heksadesimal bagi nombor tersebut |
|
Menyemak sama ada nombor yang diluluskan adalah infiniti. |
|
Menyemak sama ada nombor yang diluluskan adalahNaN |
|
Membungkus yang diluluskan doubledalam Doubleobjek |
|
Mengembalikan nombor yang diperoleh daripada rentetan yang diluluskan |
Menariknya, terdapat isInfinite()kaedah yang kembali truejika nombor yang diluluskan adalah infiniti positif atau negatif.
Kaedahnya isNaN()adalah serupa — ia menyemak sama ada nombor yang diluluskan adalah NaN( Bukan Nombor , pemalar khas yang menunjukkan nilai yang tidak ditentukan).
3. Characterkelas
Kelas ini Charactermenarik terutamanya kerana sejumlah besar kaedah utiliti statik yang membolehkan anda menyemak sama ada aksara tergolong dalam pelbagai kategori.
Contoh
| Kaedah | Penerangan |
|---|---|
|
Menyemak sama ada aksara ialah aksara abjad |
|
Menyemak sama ada watak itu adalah huruf |
|
Menyemak sama ada aksara itu ialah digit |
|
Menyemak sama ada aksara ialah ruang, pemisah baris atau pemisah halaman (kod: 12, 13, 14) |
|
Menyemak sama ada aksara ialah ruang putih: ruang, tab, dsb. |
|
Menyemak sama ada aksara adalah huruf kecil |
|
Menyemak sama ada aksara itu huruf besar |
|
Menukar aksara kepada huruf kecil |
|
Menukar aksara kepada huruf besar |
Ciri kaedah ini ialah ia berfungsi dengan semua abjad yang diketahui: Angka Arab dikelaskan sebagai digit, dsb.
4. Booleankelas
Jenisnya Booleanhampir sama dengan jenisnya boolean. Perbezaannya adalah minimum.
Di bawah ini kami menunjukkan versi ringkas kelas Boolean:
| Kod | Penerangan |
|---|---|
|
Pemalar: TRUEи FALSE Pembolehubah Booleankelas pembina Kaedah mengembalikan nilai pembolehubah dalaman Kaedah statik ini menukar truekepada TRUEdan falsekepada FALSE. |
Jenis ini Booleanmempunyai dua pemalar (dua medan):
| Pemalar kelas | Rakan sejawat untuk jenis boolean | Penerangan |
|---|---|---|
|
|
benar |
|
|
salah |
Anda boleh bekerja dengan mereka dengan cara yang sama seperti anda bekerja dengan booleanjenis:
| Kod | Catatan |
|---|---|
|
Kelas Booleanadalah satu-satunya kelas yang boleh ditulis dalam keadaan |
|
Ketiga-tiga pembolehubah adalah sama dengan true/TRUE |
|
Pemalar boleh dibandingkan menggunakan kedua-duanya equalsdan == Ini juga akan berfungsi. |
Autoboxing berfungsi hebat di sini. Ini bermakna anda boleh menggunakan jenis ini dengan cara yang sama seperti jenis boolean- tiada perangkap yang perlu diberi perhatian.
| Bagaimana ia ditulis | Bagaimana ia berfungsi |
|---|---|
|
|
Dan di sini perbandingan booleandan Booleanjenis:
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
Jika anda benar-benar memerlukan Booleanobjek bebas, maka anda perlu menciptanya secara eksplisit:
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
Satu lagi contoh, di mana kita akan menggunakan Booleanbahagian dalam if:
| Kod | Catatan |
|---|---|
|
Ini akan disusun dan berfungsi |
Ini akan menyusun, tetapi ia tidak akan berfungsi!
| Kod | Catatan |
|---|---|
|
ralat . Baris ini akan membuang pengecualian |
5. Caching nilai semasa autoboxing
Terdapat beberapa perangkap yang berkaitan dengan jenis pembalut integer.
Seperti yang anda sedia maklum, jika kita membandingkan an intdan an Integer, ia Integerditukar kepada int:
| Bagaimana ia ditulis | Bagaimana ia berfungsi |
|---|---|
|
|
Jika anda membandingkan dua Integerobjek antara satu sama lain, ia tidak ditukar kepada ints:
| Kod | Output konsol |
|---|---|
|
|
a == cdan , tetapi , kerana apabila kita membandingkan dan kita membandingkan rujukan. Yang pada asasnya adalah apa yang kita harapkan.b == ca != bab
Kejutan
Tetapi jika kita menggantikan 500dengan 100, maka kita mendapat hasil yang sama sekali berbeza:
| Kod | Output konsol |
|---|---|
|
|
Isunya di sini ialah objek baharu tidak selalu sebenarnya dibuat semasa autoboxingInteger . Objek dicache untuk nilai -128melalui 127inklusif.
Kelas Integermempunyai tatasusunan tersembunyi yang menyimpan objek: Integer(-128), Integer(-127), ... Integer(126),Integer(127)
Jika anda menulis Integer x = 128, maka proses autoboxing mencipta objek baharu, tetapi jika anda menulis Integer x = 127, maka proses autoboxing mendapatkan semula objek sedia ada daripada cache (dari tatasusunan).
Jika anda tidak mahu Integerobjek itu datang daripada cache, anda perlu menciptanya secara eksplisit dengan menulis:Integer x = new Integer(127);
Semua jenis pembungkus mempunyai cache sedemikian: Integer, Long, Byte, Short, Boolean. Untuk Booleanjenis, nilainya TRUEdan FALSEkedua-duanya adalah pemalar, jadi ia juga pada asasnya dicache.
GO TO FULL VERSION