1. Integerชั้นเรียน
Integerยังดีที่เป็นคลาส ซึ่งหมายความว่าสามารถมีฟิลด์และเมธอดได้ และแน่นอนว่ามันมี จำนวนมาก - หลายสิบคน ที่นี่เราจะพิจารณาสิ่งพื้นฐานที่สุด
คลาสIntegerมีสองฟิลด์ที่มีค่าสูงสุดและต่ำสุดที่เป็นไปได้ของintประเภท:
| สนาม | คำอธิบาย |
|---|---|
|
ค่าที่เป็นไปได้สูงสุดของintประเภท |
|
ค่าต่ำสุดที่เป็นไปได้ของintประเภท |
บางครั้งคุณต้องการกำหนดintค่าที่น้อยที่สุดหรือมากที่สุดให้กับตัวแปร เพื่อหลีกเลี่ยงการทำให้โค้ดยุ่งเหยิงด้วยค่าคงที่ที่เข้าใจยาก คุณสามารถเขียนสิ่งนี้ให้ชัดเจนได้ดังนี้:
| รหัส | คำอธิบาย |
|---|---|
|
|
ชั้นIntegerเรียนยังมีวิธีการที่น่าสนใจ พวกเขาอยู่ที่นี่:
| วิธีการ | คำอธิบาย |
|---|---|
|
ส่งกลับสตริงที่เป็นตัวแทนเลขฐานสิบหกของตัวเลข |
|
ส่งกลับสตริงที่เป็นตัวแทนของเลขฐานสอง |
|
ส่งกลับสตริงที่เป็นตัวแทนเลขฐานแปดของตัวเลข |
|
ห่อสิ่งที่ผ่านไปintในIntegerวัตถุ |
|
ส่งกลับจำนวนที่ได้รับจากสตริงที่ส่งผ่าน |
ก่อนหน้านี้คุณพบInteger.parseInt()เมธอด แบบสแตติก จำวิธีการทำงาน:
int name = Integer.parseInt(string);
ถ้าสตริงที่มีตัวเลข (เฉพาะตัวเลข) ถูกส่งไปยังparseInt()เมธอด มันจะแยกวิเคราะห์สตริงและส่งกลับตัวเลขที่มี
วิธีที่เหลือก็มีประโยชน์เช่นกัน ตัวอย่างเช่น บางตัวสามารถแปลงตัวเลขที่ผ่านเป็นสตริงที่มีการแสดงเลขฐานสอง เลขฐานแปด หรือเลขฐานสิบหกของตัวเลข
2. Doubleชั้นเรียน
โดยทั่วไปDoubleคลาสจะคล้ายกับIntegerคลาส แต่จะล้อม a doubleแทนที่จะเป็นint. นอกจากนี้ยังมีฟิลด์และวิธีการที่เราสนใจ พิจารณาสองสามข้อ:
ชั้นDoubleเรียนมีหกสาขาที่น่าสนใจ:
| สนาม | คำอธิบาย |
|---|---|
|
อินฟินิตี้เชิงลบ |
|
อินฟินิตี้บวก |
|
เลขชี้กำลังขั้นต่ำที่เป็นไปได้ (2 x ) |
|
เลขชี้กำลังที่เป็นไปได้สูงสุด (2 x ) |
|
ค่าต่ำสุดที่เป็นไปได้ของdoubleประเภท |
|
ค่าที่เป็นไปได้สูงสุดของdoubleประเภท |
อินฟินิตี้
ถ้าคุณหาร-1.0ด้วย0.0คุณจะได้ค่าอนันต์ติดลบ ถ้าคุณหาร1.0ด้วย0.0คุณจะได้ค่าอนันต์เป็นบวก ไม่เพียงแต่คุณสามารถหาร a doubleด้วยศูนย์เท่านั้น แต่คุณยังสามารถใช้เก็บผลลัพธ์ของการดำเนินการเหล่านี้ได้อีกด้วย
เลขชี้กำลังของ adouble
การทำความเข้าใจเกี่ยวกับเลขชี้กำลังเป็นเรื่องง่าย ภายใน double ประกอบด้วย mantissa และ exponent แต่ที่นี่ค่าของเลขยกกำลังไม่ใช่แต่ ดังนั้น ถ้าเลขชี้กำลังเพิ่มขึ้นค่ารวมของตัวเลขจะเพิ่มเป็นสองเท่า10x2x1
MIN_EXPONENT == -1024ซึ่งหมายถึงซึ่งมีค่าโดยประมาณเท่ากับ2-102410-308
และแน่นอนว่าDoubleคลาสนี้มีวิธีการที่น่าสนใจคือ
| วิธีการ | คำอธิบาย |
|---|---|
|
ส่งกลับสตริงที่เป็นตัวแทนเลขฐานสิบหกของตัวเลข |
|
ตรวจสอบว่าตัวเลขที่ผ่านเป็นอนันต์หรือไม่ |
|
ตรวจสอบว่าหมายเลขที่ผ่านคือNaN |
|
ห่อสิ่งที่ส่งผ่านdoubleในDoubleวัตถุ |
|
ส่งกลับจำนวนที่ได้รับจากสตริงที่ส่งผ่าน |
ที่น่าสนใจคือมีisInfinite()เมธอดที่จะคืนค่าtrueหากตัวเลขที่ผ่านเป็นค่าบวกหรือค่าลบอนันต์
วิธี นี้isNaN()คล้ายกัน — จะตรวจสอบว่าตัวเลขที่ผ่านเป็นNaN( ไม่ใช่ตัวเลข ค่าคงที่พิเศษที่ระบุค่าที่ไม่ได้กำหนด)
3. Characterชั้นเรียน
คลาส นี้Characterมีความน่าสนใจเป็นหลักเนื่องจากมีวิธียูทิลิตี้แบบคงที่จำนวนมากที่ช่วยให้คุณตรวจสอบว่าอักขระอยู่ในหมวดหมู่ต่างๆ หรือไม่
ตัวอย่าง
| วิธีการ | คำอธิบาย |
|---|---|
|
ตรวจสอบว่าอักขระเป็นอักขระที่เป็นตัวอักษรหรือไม่ |
|
ตรวจสอบว่าอักขระเป็นตัวอักษรหรือไม่ |
|
ตรวจสอบว่าอักขระเป็นตัวเลขหรือไม่ |
|
ตรวจสอบว่าอักขระเป็นช่องว่าง ตัวแบ่งบรรทัด หรือตัวแบ่งหน้า (รหัส: 12, 13, 14) |
|
ตรวจสอบว่าอักขระเป็นช่องว่างหรือไม่: ช่องว่าง แท็บ ฯลฯ |
|
ตรวจสอบว่าอักขระเป็นตัวพิมพ์เล็กหรือไม่ |
|
ตรวจสอบว่าอักขระเป็นตัวพิมพ์ใหญ่หรือไม่ |
|
แปลงอักขระเป็นตัวพิมพ์เล็ก |
|
แปลงอักขระเป็นตัวพิมพ์ใหญ่ |
คุณลักษณะของวิธีการเหล่านี้คือการทำงานกับตัวอักษรที่รู้จักทั้งหมด: เลขอารบิคถูกจัดประเภทเป็นตัวเลข เป็นต้น
4. Booleanชั้นเรียน
ประเภทBooleanเกือบจะเหมือนกับbooleanประเภท ความแตกต่างมีน้อย
ด้านล่างเราจะแสดงคลาสแบบง่ายBoolean:
| รหัส | คำอธิบาย |
|---|---|
|
ค่าคง ที่ : TRUEи ตัวสร้างคลาสตัวแปร เมธอดส่งคืนค่าของตัวแปรภายใน วิธีการสแตติกนี้จะแปลง เป็นและเป็นFALSE BooleantrueTRUEfalseFALSE |
ประเภทBooleanมีค่าคงที่สองตัว (สองฟิลด์):
| ค่าคงที่ของคลาส | คู่กันสำหรับประเภทบูลีน | คำอธิบาย |
|---|---|---|
|
|
จริง |
|
|
เท็จ |
คุณสามารถทำงานกับพวกเขาในลักษณะเดียวกับที่คุณทำงานกับbooleanประเภท:
| รหัส | บันทึก |
|---|---|
|
คลาสBooleanเป็นคลาสเดียวที่สามารถเขียนได้ภายในเงื่อนไข |
|
ตัวแปรทั้งสามมีค่าเท่ากับtrue/TRUE |
|
สามารถเปรียบเทียบค่าคงที่ได้โดยใช้ทั้งสองอย่างequalsและ== สิ่งนี้ก็จะใช้ได้เช่นกัน |
การทำกล่องอัตโนมัติใช้งานได้ดีที่นี่ ซึ่งหมายความว่าคุณสามารถใช้ประเภทนี้ในลักษณะเดียวกับbooleanประเภท — ไม่มีข้อผิดพลาดให้ระวัง
| วิธีการเขียน | มันทำงานอย่างไร |
|---|---|
|
|
และนี่คือการเปรียบเทียบ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:
| รหัส | บันทึก |
|---|---|
|
สิ่งนี้จะรวบรวมและทำงาน |
สิ่งนี้จะรวบรวม แต่จะไม่ทำงาน!
| รหัส | บันทึก |
|---|---|
|
ข้อผิดพลาด . บรรทัดนี้จะทำให้เกิดข้อยกเว้น |
5. การแคชค่าระหว่างการทำกล่องอัตโนมัติ
มีข้อผิดพลาดบางอย่างที่เกี่ยวข้องกับประเภทตัวห่อจำนวนเต็ม
อย่างที่คุณทราบแล้ว ถ้าเราเปรียบเทียบ an intและ an IntegerจะIntegerถูกแปลงเป็นint:
| วิธีการเขียน | มันทำงานอย่างไร |
|---|---|
|
|
หากคุณเปรียบเทียบIntegerวัตถุสองชิ้นด้วยกัน วัตถุเหล่านั้นจะไม่ถูกแปลงเป็นints:
| รหัส | เอาต์พุตคอนโซล |
|---|---|
|
|
a == cและแต่เนื่องจากเมื่อเราเปรียบเทียบและเรากำลังเปรียบเทียบข้อมูลอ้างอิง ซึ่งเป็นสิ่งที่เราคาดหวังเป็นหลักb == ca != bab
เซอร์ไพรส์
แต่ถ้าเราแทนที่500ด้วย100เราจะได้ผลลัพธ์ที่แตกต่างไปจากเดิมอย่างสิ้นเชิง:
| รหัส | เอาต์พุตคอนโซล |
|---|---|
|
|
ปัญหาที่นี่คือวัตถุใหม่ไม่ ได้ ถูกสร้างขึ้นในระหว่างการทำกล่อง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ค่าเป็นทั้งค่าคงที่ ดังนั้นค่าเหล่านี้จึงถูกแคชไว้ด้วย
GO TO FULL VERSION