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
Integer.MAX_VALUE
Nilai maksimum jenis yang intmungkin
Integer.MIN_VALUE
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
int min = Integer.MIN_VALUE;
min == 0x80000000

Kelas ini Integerjuga mempunyai beberapa kaedah yang menarik. Di sini mereka:

Kaedah Penerangan
String Integer.toHexString(int)
Mengembalikan rentetan yang merupakan perwakilan heksadesimal bagi nombor tersebut
String Integer.toBinaryString(int)
Mengembalikan rentetan yang merupakan perwakilan binari nombor
String Integer.toOctalString(int)
Mengembalikan rentetan yang merupakan perwakilan perlapanan bagi nombor
Integer Integer.valueOf(int i)
Membungkus yang diluluskan intdalam Integerobjek
Integer Integer.parseInt(String)
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
double Double.NEGATIVE_INFINITY
Infiniti negatif
double Double.POSITIVE_INFINITY
Infiniti positif
int Double.MIN_EXPONENT
eksponen minimum yang mungkin (2 x )
int Double.MAX_EXPONENT
Eksponen maksimum yang mungkin (2 x )
double Double.MIN_VALUE
Nilai minimum jenis yang doublemungkin
double Double.MAX_VALUE
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
String Double.toHexString(double)
Mengembalikan rentetan yang merupakan perwakilan heksadesimal bagi nombor tersebut
boolean Double.isInfinite(double)
Menyemak sama ada nombor yang diluluskan adalah infiniti.
boolean Double.isNaN(double)
Menyemak sama ada nombor yang diluluskan adalahNaN
Double Double.valueOf(double)
Membungkus yang diluluskan doubledalam Doubleobjek
Double Double.parseDouble(String)
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
Character.isAlphabetic(int)
Menyemak sama ada aksara ialah aksara abjad
Character.isLetter(char)
Menyemak sama ada watak itu adalah huruf
Character.isDigit(char)
Menyemak sama ada aksara itu ialah digit
Character.isSpaceChar(char)
Menyemak sama ada aksara ialah ruang, pemisah baris atau pemisah halaman (kod: 12, 13, 14)
Character.isWhitespace(char)
Menyemak sama ada aksara ialah ruang putih: ruang, tab, dsb.
Character.isLowerCase(char)
Menyemak sama ada aksara adalah huruf kecil
Character.isUpperCase(char)
Menyemak sama ada aksara itu huruf besar
Character.toLowerCase(char)
Menukar aksara kepada huruf kecil
Character.toUpperCase(char)
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
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


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
Boolean.TRUE
true
benar
Boolean.FALSE
false
salah

Anda boleh bekerja dengan mereka dengan cara yang sama seperti anda bekerja dengan booleanjenis:

Kod Catatan
if (Boolean.TRUE)
{
}
Kelas Booleanadalah satu-satunya kelas yang boleh ditulis dalam keadaan
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean c = true;
Ketiga-tiga pembolehubah adalah sama dengan true/TRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
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
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

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
Boolean less = (2 < 3);
if (less)
{
   ...
}
Ini akan disusun dan berfungsi

Ini akan menyusun, tetapi ia tidak akan berfungsi!

Kod Catatan
Boolean less = null;
if (less)
{
   ...
}

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
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Jika anda membandingkan dua Integerobjek antara satu sama lain, ia tidak ditukar kepada ints:

Kod Output konsol
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




false
true
true

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
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




true
true
true

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.