ชนิดข้อมูลใน Java: ชนิดข้อมูลดั้งเดิมและไม่ใช่แบบพื้นฐาน
เผยแพร่แล้ว: 2020-12-01สารบัญ
บทนำ
ในภาษาการเขียนโปรแกรมใด ๆ ชนิดข้อมูลคือการกำหนดข้อมูลที่ช่วยให้คอมพิวเตอร์หรือคอมไพเลอร์ทราบว่าโปรแกรมเมอร์ต้องการกำหนดข้อมูลอย่างไร ชนิดข้อมูลเพิ่มข้อจำกัดให้กับตัวแปรหรือฟังก์ชันในขณะที่กำหนดค่า
ชนิดข้อมูลเหล่านี้กำหนดพฤติกรรมของข้อมูล เช่น วิธีการจัดเก็บค่าของประเภทนั้นและการดำเนินการที่สามารถทำได้กับข้อมูล มาดูประเภทข้อมูลทั้งหมดที่ java จัดเตรียมไว้ให้
ชนิดข้อมูลดั้งเดิม
ไม่สามารถแยกประเภทข้อมูลพื้นฐานเป็นประเภทข้อมูลที่เรียบง่ายกว่านี้ได้อีก Java มีข้อมูลพื้นฐาน 8 ประเภท มาสำรวจกัน!
ไบต์
ไบต์เป็นประเภทจำนวนเต็มที่เก็บตัวเลขจำนวนเต็มตั้งแต่ -128 ถึง 127 ซึ่งจะล้างปัญหาข้อจำกัดของหน่วยความจำ หากคุณกำลังจัดการกับตัวเลขขนาดเล็ก เนื่องจากต้องใช้หน่วยความจำเพียง 1 ไบต์ ตัวแปรไบต์สามารถประกาศได้โดยใช้คีย์เวิร์ด "byte" การกำหนดค่าที่สูงกว่า 127 ให้กับไบต์จะทำให้เกิดข้อผิดพลาด "ประเภทที่เข้ากันไม่ได้"
| ไบต์ n1 = 98 ; ระบบ . ออก _ พิมพ์ (n1); |
ตัวอย่างด้านบนพิมพ์ 98 ตามที่คาดไว้
สั้น
Short คือประเภท Integer ที่เก็บตัวเลขจำนวนเต็มตั้งแต่ -32768 ถึง 32767 โดยจะใช้หน่วยความจำ 2 ไบต์จากดิสก์ ตัวแปร short สามารถประกาศได้โดยใช้คีย์เวิร์ด "short" การกำหนดค่าที่มากกว่า 32767 ให้กับตัวแปรแบบสั้นจะทำให้เกิดข้อผิดพลาด "ประเภทที่เข้ากันไม่ได้"

| สั้น n1 = 9876 ; ระบบ . ออก _ พิมพ์ (n1); |
ตัวอย่างด้านบนจะพิมพ์ 9876 เป็นเอาต์พุต
Int
int เป็นประเภทจำนวนเต็มที่เก็บตัวเลขจำนวนเต็มตั้งแต่ -2147483648 ถึง 2147483647 โดยจะใช้หน่วยความจำ 4 ไบต์ในดิสก์ โดยทั่วไป โปรแกรมเมอร์ต้องการใช้ int เพื่อประกาศตัวแปรที่เก็บค่าตัวเลขมากกว่า คอมไพเลอร์ Java แสดงข้อผิดพลาด "ประเภทที่เข้ากันไม่ได้" หากพยายามกำหนดค่าที่มากกว่าช่วง
| int n1 = 987654 ; ระบบ . ออก _ พิมพ์ (n1); |
ตัวอย่างด้านบนจะพิมพ์ 987654 เป็นเอาต์พุต
ยาว
นี่เป็นประเภทข้อมูลที่น่าสนใจซึ่งใช้หน่วยความจำ 8 ไบต์ในดิสก์ เป็นประเภทจำนวนเต็มที่เก็บตัวเลขจำนวนเต็มตั้งแต่ -9223372036854775808 ถึง 9223372036854775807 วุ้ยใช้เวลาอ่านช่วงนั้นนานพอสมควร
ใช้เมื่อชนิดข้อมูล int ล้นสำหรับการดำเนินการที่เราดำเนินการ จำไว้ว่าเราต้องลงท้ายค่าด้วย 'L' ในขณะที่กำหนด
| ยาว n1 = 987654321098765L ; ระบบ . ออก _ พิมพ์ (n1); |
ตัวอย่างด้านบนพิมพ์ 987654321098765 ตามที่คาดไว้
ลอย
Float เป็นประเภทข้อมูลแบบทศนิยม ซึ่งหมายความว่าสามารถจัดเก็บค่าต่างๆ รวมถึงความแม่นยำของทศนิยม ให้เราคิดว่าคุณได้พัฒนารหัสสำหรับการสังเกตค่าใช้จ่ายทั้งหมดของคุณ แต่คุณค่อนข้างเข้มงวดและต้องการติดตามเงินแต่ละเพนนีที่คุณใช้ไป ในกรณีนั้น int จะไม่ทำงานเพราะ int สามารถเก็บได้เฉพาะจำนวนเต็มเท่านั้น
เราต้องการชนิดข้อมูลทศนิยมสำหรับงานนี้ ทศนิยมสามารถเก็บตัวเลขที่เป็นเศษส่วนได้ตั้งแต่ 3.4e-038 ถึง 3.4e+038 ซึ่งสามารถเก็บทศนิยมได้มากถึง 7 หลัก จำไว้ว่าคุณควรลงท้ายค่าด้วย 'f'
| ลอย n = 98.76f ; ระบบ . ออก _ println(n); |
ตัวอย่างด้านบนจะพิมพ์ 98.76 เป็นเอาต์พุต
อ่าน: คุณสมบัติและประโยชน์ของ JavaBeans: คุณควรใช้อย่างไร?
สองเท่า
ดับเบิ้ลคล้ายกับทศนิยม แต่เมื่อชื่อกล่าวว่ามันเป็นสองเท่าของทศนิยมในกรณีของความแม่นยำทศนิยม สามารถมีความแม่นยำทศนิยม 15 หลัก และสามารถเก็บตัวเลขที่เป็นเศษส่วนได้ตั้งแต่ 1.7e-308 ถึง 1.7e+308 จำไว้ว่าคุณต้องลงท้ายค่าด้วยตัว "d"
มาดูโค้ดเพื่อทำความเข้าใจความแตกต่างระหว่าง float และ double
| การ ทดสอบ ระดับ สาธารณะ { โมฆะ คง สาธารณะ หลัก ( สตริง args[]) { float a1 = 1.f / 70 ; ลอย b1 = 0 ; ดับเบิ้ล a2 = 1.d / 70 ; ดับเบิ้ล b2 = 0 ; ลอย f1 = 1f ; ดับเบิล f2 = 1d ; สำหรับ ( int i = 0 ;i < 490 ;i ++ ){ b1 = b1 + a1; b2 = b2 + a2; ถ้า (ผม > 1 && ผม <= 50 ){ f1 = f1 * ผม; f2 = f2 * ผม; } } ระบบ . ออก _ พิมพ์ (b1); //line1 ระบบ . ออก _ พิมพ์ (b2); //line2 ระบบ . ออก _ พิมพ์ (f1); //line3 ![]() ระบบ . ออก _ พิมพ์ (f2); //line4 } } |
การคำนวณนิพจน์ “(1/70)*490” ในมือให้ 7 เป็นคำตอบ แต่การดำเนินการใน java โดยใช้ float และ double ให้คำตอบที่ต่างออกไป ในตัวอย่างข้างต้น ตัวแปร float และตัวแปรคู่ถูกเริ่มต้นด้วย 1/70 และการเพิ่มค่านี้ให้กับตัวแปรอื่น 490 ครั้งควรให้ 7 เป็นคำตอบแก่เรา
เมื่อเรียกใช้ข้อมูลโค้ดด้านบนบรรทัดที่ 1 จะพิมพ์ 6.9999795 ซึ่งมีความแม่นยำทศนิยม 7 หลัก ในขณะที่บรรทัดที่ 2 พิมพ์ 6.999999999999978 ซึ่งมีความแม่นยำทศนิยม 15 หลัก ดังนั้นหาก float ไม่ได้ให้ความแม่นยำของทศนิยมที่แม่นยำ คุณก็สามารถเลือกทศนิยมสองเท่าได้ นอกจากนี้ ทุ่นลอยมีแนวโน้มที่จะกระทบอินฟินิตี้มากกว่า เนื่องจากช่วงของทุ่นน้อยกว่าเมื่อเทียบกับสองเท่า
ตัวอย่างเช่น หากคุณเก็บแฟกทอเรียลเป็นจำนวนที่มาก ตัวแปรนั้นจะไปถึงค่าอนันต์ จากตัวอย่างข้างต้น เราจะเห็นได้ว่ามีสองตัวแปรที่ใช้เก็บแฟกทอเรียล 50 และในขณะที่เราพิมพ์ผลลัพธ์ บรรทัดที่ 3 พิมพ์อินฟินิตี้ และบรรทัดที่ 4 พิมพ์ 3.0414093201713376E64 ดังนั้นหาก float ไม่ตรงกับตัวเลขของคุณ ช่วงแล้วคุณสามารถเลือกสำหรับสองเท่า
ทั้ง float และ double สามารถใช้เป็นตัวเลขทางวิทยาศาสตร์ด้วย 'e' โดยที่ 'e' แสดงถึงพลังของ 10 ตัวอย่างเช่น 3e2f เทียบเท่ากับ 300.0 ในประเภทข้อมูล float และ 3e4d เทียบเท่ากับ 30000.0 ในประเภทข้อมูล double
บูลีน
ชนิดข้อมูลบูลีนสามารถรับค่าได้เพียงสองค่าจริงและเท็จ ซึ่งประกาศโดยใช้คีย์เวิร์ดบูลีนในจาวา โดยทั่วไปชนิดข้อมูลนี้ใช้เป็นตัวแปรแฟล็กเพื่อติดตามการเปลี่ยนแปลงที่เราทำในโค้ด ตัวอย่างเช่น การตั้งค่าแฟล็กเป็น จริง หากตัวเลขหารด้วย 2 ลงตัว อย่างอื่นเป็นเท็จ
| ธง บูลีน = true ; บูลีน b1 = เท็จ ; ระบบ . ออก _ println(ธง); //พิมพ์จริง ระบบ . ออก _ พิมพ์ (b1); //พิมพ์เท็จ |
Char
ชนิดข้อมูลถ่านใช้เพื่อเก็บอักขระตัวเดียว สามารถประกาศชนิดข้อมูลนี้โดยใช้คีย์เวิร์ด char จำไว้ว่าเราต้องใส่อักขระในเครื่องหมายคำพูดเดี่ยวขณะกำหนด มันสามารถเก็บทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในประเภทข้อมูลถ่าน
การจัดเก็บอักขระมากกว่าหนึ่งตัวในประเภทข้อมูลถ่านทำให้เกิดข้อผิดพลาด นอกจากนี้ยังมีข้อเท็จจริงสนุกๆ เกี่ยวกับประเภทข้อมูลถ่าน กล่าวคือ การพิมพ์ตัวอักษรให้เป็นจำนวนเต็มเก็บค่า ASCII ของอักขระนั้น และในทางกลับกันก็เป็นความจริงเช่นกัน
| ถ่าน c1 = ' a ' ; ถ่าน c2 = 66 ; ระบบ . ออก _ พิมพ์ (c1); //line1 ระบบ . ออก _ พิมพ์ (c2); //line2 ระบบ . ออก _ println(( int )c1); //line3 |
ในตัวอย่างบรรทัดที่ 1 ด้านบน พิมพ์ 'a' เป็นเอาต์พุตตามที่คาดไว้ บรรทัดที่ 2 พิมพ์ 'B' เป็นเอาต์พุตเนื่องจาก 66 อ้างถึง B ในตาราง ASCII บรรทัดที่ 3 พิมพ์ 97 เป็นเอาต์พุตเนื่องจากเป็นค่า ASCII ของ 'a'
แต่ถ้าเราต้องการเก็บตัวละครมากกว่าหนึ่งตัวล่ะ? เราจะมาหาพวกเขาในย่อหน้าที่จะถึงนี้
อ่านเพิ่มเติม: 17 แนวคิดและหัวข้อโครงการ Java ที่น่าสนใจสำหรับผู้เริ่มต้น
ชนิดข้อมูลที่ไม่ใช่พื้นฐาน
ชนิดข้อมูลที่ไม่ใช่พื้นฐานใน java เรียกอีกอย่างว่าประเภทการอ้างอิง เพราะพวกเขาอ้างถึงอ็อบเจ็กต์ โปรแกรมเมอร์สร้างประเภทข้อมูลที่ไม่ใช่พื้นฐานและไม่ได้กำหนดไว้ล่วงหน้า เนื่องจาก non-primitives ถูกเรียกว่าอ็อบเจ็กต์ จึงสามารถกำหนดเป็นค่าว่างได้ ซึ่งไม่ใช่กรณีในประเภทดั้งเดิม
ต่างจากชนิดข้อมูลดั้งเดิม ชนิดข้อมูลที่ไม่ใช่แบบพื้นฐานต้องขึ้นต้นด้วยอักษรตัวพิมพ์ใหญ่ ชนิดข้อมูลที่ไม่ใช่พื้นฐานทั้งหมดมีขนาดเท่ากันและใช้หน่วยความจำเท่ากันบนดิสก์ ซึ่งแตกต่างกันในกรณีของชนิดข้อมูลดั้งเดิม
สตริง
สตริงเป็นชนิดข้อมูลพิเศษใน java ซึ่งขัดแย้งกับข้อเท็จจริงที่ว่าโปรแกรมเมอร์กำหนดประเภทที่ไม่ใช่แบบพื้นฐาน ชนิดข้อมูลสตริงเป็นชนิดข้อมูลที่ไม่ใช่แบบพื้นฐาน แต่มีการกำหนดไว้ล่วงหน้าใน java บางคนเรียกมันว่าชนิดข้อมูลพื้นฐานลำดับที่เก้าพิเศษ
วิธีนี้ช่วยแก้ปัญหากรณีที่อักขระไม่สามารถเก็บอักขระได้หลายตัว ชนิดข้อมูลสตริงใช้เพื่อจัดเก็บลำดับของอักขระ จำไว้ว่าคุณต้องใส่ลำดับของข้อความในเครื่องหมายคำพูดคู่
| สตริง s1 = " สวัสดี " ; ระบบ . ออก _ println(s1); |
ตัวอย่างข้างต้นจะพิมพ์ "เฮ้" ตามที่คาดไว้
Arrays, Classes, Interfaces ฯลฯ เป็นข้อมูลประเภทอื่นที่ไม่ใช่ข้อมูลพื้นฐานใน java
จะคำนวณช่วงของประเภทข้อมูลได้อย่างไร?
หลังจากดูช่วงของประเภทข้อมูลดั้งเดิมแล้ว คุณอาจสงสัยว่าเราต้องจำสิ่งนี้หรือไม่? คำตอบก็คือไม่ แต่เราต้องจำขนาดของข้อมูลแต่ละประเภท แล้วจึงคำนวณช่วงของประเภทข้อมูลนั้นได้
ตัวอย่างเช่น ชนิดข้อมูลไบต์ใช้หน่วยความจำ 1 ไบต์บนดิสก์ ที่ระดับคอมไพเลอร์ ข้อมูลทั้งหมดจะถูกจัดเก็บในรูปแบบของบิตและหนึ่งไบต์มี 8 บิต ตอนนี้หนึ่งใน 8 บิตถูกใช้เพื่อระบุเครื่องหมายของตัวเลข และอีก 7 บิตที่เหลือสามารถเก็บตัวเลขจริงได้ ดังนั้นจำนวนสูงสุดที่เราจัดเก็บโดยใช้ 7 บิตคือ 128
ดังนั้น -128 คือขีด จำกัด ล่างของประเภทข้อมูลไบต์และ +127 เป็นขีด จำกัด บนเนื่องจากศูนย์เป็นตัวเลขแรกในบรรทัดตัวเลขหลังตัวเลขติดลบ
ในทำนองเดียวกันในประเภททศนิยม ข้อมูลจะถูกแบ่งออกเป็น 3 ส่วนที่มีลายเซ็น แมนทิสซา และเลขชี้กำลัง ส่วน Mantissa ใช้สำหรับเก็บความแม่นยำของทศนิยม ทศนิยมมี 23 บิต mantissa บวกหนึ่งบิตที่ซ่อนอยู่และสองเท่ามี 52 บิต mantissa บวกหนึ่งบิตที่ซ่อนอยู่
สำหรับ float ให้ log(2^24)/log(10) ซึ่งมีค่าเท่ากับ 7 โดยประมาณ ดังนั้นความแม่นยำทศนิยม 7 หลัก
สำหรับ double, log(2^53)/log(10) ซึ่งมีค่าเท่ากับ 15 โดยประมาณ ดังนั้นความแม่นยำทศนิยม 15 หลัก

ลงทะเบียนเรียน หลักสูตรวิศวกรรมซอฟต์แวร์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
บทสรุป
เราได้เห็นข้อมูลประเภทต่างๆ ใน java, เข้าใจประเภทข้อมูล primitive และ non-primitive, ความแตกต่างระหว่าง primitive และ non-primitive เดินผ่านตัวอย่างข้อมูลโค้ดเพื่อให้มีความรู้พื้นฐานเกี่ยวกับการประกาศประเภทข้อมูล
เข้าใจวิธีการคำนวณช่วงของชนิดข้อมูลต่างๆ ของชนิดข้อมูลจำนวนเต็ม วิธีการคำนวณความแม่นยำของทศนิยมของชนิดข้อมูลทศนิยม
เมื่อคุณทราบประเภทข้อมูลต่างๆ ใน java แล้ว ให้เริ่มสำรวจพวกมันได้เลย!
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java, OOP และการพัฒนาซอฟต์แวร์ฟูลสแตก โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์ฟูลสแตก ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9+ โครงการและการมอบหมาย สถานะศิษย์เก่า IIIT-B โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ


