ชนิดข้อมูลใน 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 โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ

เตรียมความพร้อมสู่อาชีพแห่งอนาคต

สมัครเลยตอนนี้สำหรับปริญญาโทด้านวิศวกรรมซอฟต์แวร์