1. Integer
kelas
Integer
juga 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 Integer
mempunyai dua medan yang mengandungi nilai maksimum dan minimum yang mungkin bagi int
jenis:
Padang | Penerangan |
---|---|
|
Nilai maksimum jenis yang int mungkin |
|
Nilai minimum jenis yang int mungkin |
Kadangkala anda ingin menetapkan int
nilai 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 Integer
juga 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 int dalam Integer objek |
|
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. Double
kelas
Secara umum, Double
kelas adalah serupa dengan Integer
kelas, hanya ia membalut a double
dan bukannya int
. Ia juga mempunyai bidang dan kaedah yang akan menarik minat kita. Pertimbangkan beberapa daripada mereka:
Kelas ini Double
mempunyai 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 double mungkin |
|
Nilai maksimum jenis yang double mungkin |
Infiniti
Jika anda membahagi -1.0
dengan 0.0
, anda mendapat infiniti negatif. Jika anda membahagi 1.0
dengan 0.0
, anda mendapat infiniti positif. Anda bukan sahaja boleh membahagikan double
dengan 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.10x
2x
1
MIN_EXPONENT == -1024
, yang bermaksud , yang lebih kurang sama dengan2-1024
10-308
Dan sudah tentu, Double
kelas 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 double dalam Double objek |
|
Mengembalikan nombor yang diperoleh daripada rentetan yang diluluskan |
Menariknya, terdapat isInfinite()
kaedah yang kembali true
jika 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. Character
kelas
Kelas ini Character
menarik 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. Boolean
kelas
Jenisnya Boolean
hampir sama dengan jenisnya boolean
. Perbezaannya adalah minimum.
Di bawah ini kami menunjukkan versi ringkas kelas Boolean
:
Kod | Penerangan |
---|---|
|
Pemalar: TRUE и FALSE Pembolehubah Boolean kelas pembina Kaedah mengembalikan nilai pembolehubah dalaman Kaedah statik ini menukar true kepada TRUE dan false kepada FALSE . |
Jenis ini Boolean
mempunyai 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 boolean
jenis:
Kod | Catatan |
---|---|
|
Kelas Boolean adalah satu-satunya kelas yang boleh ditulis dalam keadaan |
|
Ketiga-tiga pembolehubah adalah sama dengan true /TRUE |
|
Pemalar boleh dibandingkan menggunakan kedua-duanya equals dan == 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 boolean
dan Boolean
jenis:
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 Boolean
objek 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 Boolean
bahagian 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 int
dan an Integer
, ia Integer
ditukar kepada int
:
Bagaimana ia ditulis | Bagaimana ia berfungsi |
---|---|
|
|
Jika anda membandingkan dua Integer
objek antara satu sama lain, ia tidak ditukar kepada int
s:
Kod | Output konsol |
---|---|
|
|
a == c
dan , tetapi , kerana apabila kita membandingkan dan kita membandingkan rujukan. Yang pada asasnya adalah apa yang kita harapkan.b == c
a != b
a
b
Kejutan
Tetapi jika kita menggantikan 500
dengan 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 -128
melalui 127
inklusif.
Kelas Integer
mempunyai 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 Integer
objek 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 Boolean
jenis, nilainya TRUE
dan FALSE
kedua-duanya adalah pemalar, jadi ia juga pada asasnya dicache.