1. Integerชั้นเรียน

Integerยังดีที่เป็นคลาส ซึ่งหมายความว่าสามารถมีฟิลด์และเมธอดได้ และแน่นอนว่ามันมี จำนวนมาก - หลายสิบคน ที่นี่เราจะพิจารณาสิ่งพื้นฐานที่สุด

คลาสIntegerมีสองฟิลด์ที่มีค่าสูงสุดและต่ำสุดที่เป็นไปได้ของintประเภท:

สนาม คำอธิบาย
Integer.MAX_VALUE
ค่าที่เป็นไปได้สูงสุดของintประเภท
Integer.MIN_VALUE
ค่าต่ำสุดที่เป็นไปได้ของintประเภท

บางครั้งคุณต้องการกำหนดintค่าที่น้อยที่สุดหรือมากที่สุดให้กับตัวแปร เพื่อหลีกเลี่ยงการทำให้โค้ดยุ่งเหยิงด้วยค่าคงที่ที่เข้าใจยาก คุณสามารถเขียนสิ่งนี้ให้ชัดเจนได้ดังนี้:

รหัส คำอธิบาย
int min = Integer.MIN_VALUE;
min == 0x80000000

ชั้นIntegerเรียนยังมีวิธีการที่น่าสนใจ พวกเขาอยู่ที่นี่:

วิธีการ คำอธิบาย
String Integer.toHexString(int)
ส่งกลับสตริงที่เป็นตัวแทนเลขฐานสิบหกของตัวเลข
String Integer.toBinaryString(int)
ส่งกลับสตริงที่เป็นตัวแทนของเลขฐานสอง
String Integer.toOctalString(int)
ส่งกลับสตริงที่เป็นตัวแทนเลขฐานแปดของตัวเลข
Integer Integer.valueOf(int i)
ห่อสิ่งที่ผ่านไปintในIntegerวัตถุ
Integer Integer.parseInt(String)
ส่งกลับจำนวนที่ได้รับจากสตริงที่ส่งผ่าน

ก่อนหน้านี้คุณพบInteger.parseInt()เมธอด แบบสแตติก จำวิธีการทำงาน:

int name = Integer.parseInt(string);

ถ้าสตริงที่มีตัวเลข (เฉพาะตัวเลข) ถูกส่งไปยังparseInt()เมธอด มันจะแยกวิเคราะห์สตริงและส่งกลับตัวเลขที่มี

วิธีที่เหลือก็มีประโยชน์เช่นกัน ตัวอย่างเช่น บางตัวสามารถแปลงตัวเลขที่ผ่านเป็นสตริงที่มีการแสดงเลขฐานสอง เลขฐานแปด หรือเลขฐานสิบหกของตัวเลข



2. Doubleชั้นเรียน

โดยทั่วไปDoubleคลาสจะคล้ายกับIntegerคลาส แต่จะล้อม a doubleแทนที่จะเป็นint. นอกจากนี้ยังมีฟิลด์และวิธีการที่เราสนใจ พิจารณาสองสามข้อ:

ชั้นDoubleเรียนมีหกสาขาที่น่าสนใจ:

สนาม คำอธิบาย
double Double.NEGATIVE_INFINITY
อินฟินิตี้เชิงลบ
double Double.POSITIVE_INFINITY
อินฟินิตี้บวก
int Double.MIN_EXPONENT
เลขชี้กำลังขั้นต่ำที่เป็นไปได้ (2 x )
int Double.MAX_EXPONENT
เลขชี้กำลังที่เป็นไปได้สูงสุด (2 x )
double Double.MIN_VALUE
ค่าต่ำสุดที่เป็นไปได้ของdoubleประเภท
double Double.MAX_VALUE
ค่าที่เป็นไปได้สูงสุดของdoubleประเภท

อินฟินิตี้

ถ้าคุณหาร-1.0ด้วย0.0คุณจะได้ค่าอนันต์ติดลบ ถ้าคุณหาร1.0ด้วย0.0คุณจะได้ค่าอนันต์เป็นบวก ไม่เพียงแต่คุณสามารถหาร a doubleด้วยศูนย์เท่านั้น แต่คุณยังสามารถใช้เก็บผลลัพธ์ของการดำเนินการเหล่านี้ได้อีกด้วย

เลขชี้กำลังของ adouble

การทำความเข้าใจเกี่ยวกับเลขชี้กำลังเป็นเรื่องง่าย ภายใน double ประกอบด้วย mantissa และ exponent แต่ที่นี่ค่าของเลขยกกำลังไม่ใช่แต่ ดังนั้น ถ้าเลขชี้กำลังเพิ่มขึ้นค่ารวมของตัวเลขจะเพิ่มเป็นสองเท่า10x2x1

MIN_EXPONENT == -1024ซึ่งหมายถึงซึ่งมีค่าโดยประมาณเท่ากับ2-102410-308

และแน่นอนว่าDoubleคลาสนี้มีวิธีการที่น่าสนใจคือ

วิธีการ คำอธิบาย
String Double.toHexString(double)
ส่งกลับสตริงที่เป็นตัวแทนเลขฐานสิบหกของตัวเลข
boolean Double.isInfinite(double)
ตรวจสอบว่าตัวเลขที่ผ่านเป็นอนันต์หรือไม่
boolean Double.isNaN(double)
ตรวจสอบว่าหมายเลขที่ผ่านคือNaN
Double Double.valueOf(double)
ห่อสิ่งที่ส่งผ่านdoubleในDoubleวัตถุ
Double Double.parseDouble(String)
ส่งกลับจำนวนที่ได้รับจากสตริงที่ส่งผ่าน

ที่น่าสนใจคือมีisInfinite()เมธอดที่จะคืนค่าtrueหากตัวเลขที่ผ่านเป็นค่าบวกหรือค่าลบอนันต์

วิธี นี้isNaN()คล้ายกัน — จะตรวจสอบว่าตัวเลขที่ผ่านเป็นNaN( ไม่ใช่ตัวเลข ค่าคงที่พิเศษที่ระบุค่าที่ไม่ได้กำหนด)



3. Characterชั้นเรียน

คลาส นี้Characterมีความน่าสนใจเป็นหลักเนื่องจากมีวิธียูทิลิตี้แบบคงที่จำนวนมากที่ช่วยให้คุณตรวจสอบว่าอักขระอยู่ในหมวดหมู่ต่างๆ หรือไม่

ตัวอย่าง

วิธีการ คำอธิบาย
Character.isAlphabetic(int)
ตรวจสอบว่าอักขระเป็นอักขระที่เป็นตัวอักษรหรือไม่
Character.isLetter(char)
ตรวจสอบว่าอักขระเป็นตัวอักษรหรือไม่
Character.isDigit(char)
ตรวจสอบว่าอักขระเป็นตัวเลขหรือไม่
Character.isSpaceChar(char)
ตรวจสอบว่าอักขระเป็นช่องว่าง ตัวแบ่งบรรทัด หรือตัวแบ่งหน้า (รหัส: 12, 13, 14)
Character.isWhitespace(char)
ตรวจสอบว่าอักขระเป็นช่องว่างหรือไม่: ช่องว่าง แท็บ ฯลฯ
Character.isLowerCase(char)
ตรวจสอบว่าอักขระเป็นตัวพิมพ์เล็กหรือไม่
Character.isUpperCase(char)
ตรวจสอบว่าอักขระเป็นตัวพิมพ์ใหญ่หรือไม่
Character.toLowerCase(char)
แปลงอักขระเป็นตัวพิมพ์เล็ก
Character.toUpperCase(char)
แปลงอักขระเป็นตัวพิมพ์ใหญ่

คุณลักษณะของวิธีการเหล่านี้คือการทำงานกับตัวอักษรที่รู้จักทั้งหมด: เลขอารบิคถูกจัดประเภทเป็นตัวเลข เป็นต้น



4. Booleanชั้นเรียน

ประเภทBooleanเกือบจะเหมือนกับbooleanประเภท ความแตกต่างมีน้อย

ด้านล่างเราจะแสดงคลาสแบบง่ายBoolean:

รหัส คำอธิบาย
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);
   }
}


ค่าคง ที่ : TRUEи ตัวสร้างคลาสตัวแปร เมธอดส่งคืนค่าของตัวแปรภายใน วิธีการสแตติกนี้จะแปลง เป็นและเป็นFALSE




Boolean








trueTRUEfalseFALSE

ประเภทBooleanมีค่าคงที่สองตัว (สองฟิลด์):

ค่าคงที่ของคลาส คู่กันสำหรับประเภทบูลีน คำอธิบาย
Boolean.TRUE
true
จริง
Boolean.FALSE
false
เท็จ

คุณสามารถทำงานกับพวกเขาในลักษณะเดียวกับที่คุณทำงานกับbooleanประเภท:

รหัส บันทึก
if (Boolean.TRUE)
{
}
คลาสBooleanเป็นคลาสเดียวที่สามารถเขียนได้ภายในเงื่อนไข
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean с = true;
ตัวแปรทั้งสามมีค่าเท่ากับtrue/TRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
สามารถเปรียบเทียบค่าคงที่ได้โดยใช้ทั้งสองอย่างequalsและ==

สิ่งนี้ก็จะใช้ได้เช่นกัน

การทำกล่องอัตโนมัติใช้งานได้ดีที่นี่ ซึ่งหมายความว่าคุณสามารถใช้ประเภทนี้ในลักษณะเดียวกับbooleanประเภท — ไม่มีข้อผิดพลาดให้ระวัง

วิธีการเขียน มันทำงานอย่างไร
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();

และนี่คือการเปรียบเทียบbooleanและBooleanประเภท:

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)

หากคุณต้องการBooleanวัตถุอิสระจริงๆ คุณต้องสร้างมันอย่างชัดเจน:

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)

อีกตัวอย่างหนึ่ง ที่เราจะใช้ a Booleanภายในif:

รหัส บันทึก
Boolean less = (2 < 3);
if (less)
{
   ...
}
สิ่งนี้จะรวบรวมและทำงาน

สิ่งนี้จะรวบรวม แต่จะไม่ทำงาน!

รหัส บันทึก
Boolean less = null;
if (less)
{
   ...
}

ข้อผิดพลาด . บรรทัดนี้จะทำให้เกิดข้อยกเว้น


5. การแคชค่าระหว่างการทำกล่องอัตโนมัติ

มีข้อผิดพลาดบางอย่างที่เกี่ยวข้องกับประเภทตัวห่อจำนวนเต็ม

อย่างที่คุณทราบแล้ว ถ้าเราเปรียบเทียบ an intและ an IntegerจะIntegerถูกแปลงเป็นint:

วิธีการเขียน มันทำงานอย่างไร
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

หากคุณเปรียบเทียบIntegerวัตถุสองชิ้นด้วยกัน วัตถุเหล่านั้นจะไม่ถูกแปลงเป็นints:

รหัส เอาต์พุตคอนโซล
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 == cและแต่เนื่องจากเมื่อเราเปรียบเทียบและเรากำลังเปรียบเทียบข้อมูลอ้างอิง ซึ่งเป็นสิ่งที่เราคาดหวังเป็นหลักb == ca != bab

เซอร์ไพรส์

แต่ถ้าเราแทนที่500ด้วย100เราจะได้ผลลัพธ์ที่แตกต่างไปจากเดิมอย่างสิ้นเชิง:

รหัส เอาต์พุตคอนโซล
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

ปัญหาที่นี่คือวัตถุใหม่ไม่ ได้ ถูกสร้างขึ้นในระหว่างการทำกล่องIntegerอัตโนมัติ ออบเจกต์ถูกแคชสำหรับค่าต่างๆ-128ผ่าน127การรวม

คลาสIntegerมีอาร์เรย์ที่ซ่อนอยู่ซึ่งเก็บวัตถุ: Integer(-128), Integer(-127), ... Integer(126),Integer(127)

หากคุณเขียนInteger x = 128กระบวนการ autoboxing จะสร้างวัตถุใหม่ แต่ถ้าคุณเขียนInteger x = 127กระบวนการ autoboxing จะดึงวัตถุที่มีอยู่จากแคช (จากอาร์เรย์)

หากคุณไม่ต้องการให้Integerวัตถุมาจากแคช คุณจะต้องสร้างมันอย่างชัดเจนโดยเขียน:Integer x = new Integer(127);

Wrapper ทุกประเภทมีแคชดังกล่าว: Integer, Long, Byte, Short, Boolean. สำหรับBooleanประเภท ค่าของมันTRUEและFALSEค่าเป็นทั้งค่าคงที่ ดังนั้นค่าเหล่านี้จึงถูกแคชไว้ด้วย