บางครั้งฉันเห็นว่า API ใช้longหรือLongหรือintหรือIntegerและฉันไม่สามารถเข้าใจได้ว่ามีการตัดสินใจอย่างไร
เมื่อไหร่ควรเลือกอะไร?
บางครั้งฉันเห็นว่า API ใช้longหรือLongหรือintหรือIntegerและฉันไม่สามารถเข้าใจได้ว่ามีการตัดสินใจอย่างไร
เมื่อไหร่ควรเลือกอะไร?
คำตอบ:
Longเป็นObjectรูปแบบของlongและเป็นรูปแบบของวัตถุIntegerint
longใช้64 บิต intใช้ 32 บิตและเพื่อให้สามารถเก็บตัวเลขได้ถึง± 2 พันล้าน (-2 วันที่ 31ที่จะ +2 31 -1)
คุณควรใช้longและintนอกจากที่คุณจะต้องทำให้การใช้วิธีการสืบทอดมาจากเช่นObject เมธอดมักใช้เวอร์ชันบรรจุกล่อง ( -wrapped) เนื่องจากต้องใช้งานได้กับทุกประเภทและประเภทดั้งเดิมเช่นหรือไม่ใช่ไฟล์.hashcodeJava.util.collectionsObjectObjectintlongObject
ความแตกต่างอีกประการหนึ่งคือlongและintเป็นpass-by-valueในขณะที่LongและIntegerเป็นค่าpass-by-referenceเช่นเดียวกับ Java ที่ไม่ใช่แบบดั้งเดิมทั้งหมด ดังนั้นหากเป็นไปได้ที่จะแก้ไขLongหรือInteger (ไม่เป็นเช่นนั้นก็ไม่สามารถเปลี่ยนรูปได้โดยไม่ต้องใช้รหัส JNI) ก็จะมีเหตุผลอื่นที่จะใช้อีกอันหนึ่ง
ความแตกต่างที่สุดท้ายคือว่าLongหรืออาจจะเป็นIntegernull
มีสองสิ่งที่คุณไม่สามารถทำได้กับประเภทดั้งเดิม:
nullค่าObjectsหากคุณไม่ต้องการสิ่งเหล่านี้คุณควรเลือกประเภทดั้งเดิมเนื่องจากต้องการหน่วยความจำน้อยกว่า
intเมื่อถือตัวเลขintเล็กเกินไปให้ใช้ไฟล์longlongเล็กเกินไปให้ใช้BigIntegerCollection, การจัดการnull, ... ) ให้ใช้Integer/ LongแทนAn intคือจำนวนเต็ม 32 บิต a longคือจำนวนเต็ม 64 บิต จะใช้อันไหนขึ้นอยู่กับจำนวนตัวเลขที่คุณคาดว่าจะใช้ได้
intและlongเป็นประเภทดั้งเดิมในขณะที่IntegerและLongเป็นวัตถุ ประเภทดั้งเดิมมีประสิทธิภาพมากกว่า แต่บางครั้งคุณต้องใช้วัตถุ ตัวอย่างเช่นคลาสคอลเลกชันของ Java สามารถใช้ได้กับอ็อบเจ็กต์เท่านั้นดังนั้นหากคุณต้องการรายการจำนวนเต็มคุณต้องทำให้เป็นList<Integer>เช่น (คุณไม่สามารถใช้intใน a Listโดยตรงได้)
Int32 bits (4byte)-2,147,483,648 to 2,147,483,647Long64 bits (8byte)-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
หากใช้งานของคุณของตัวแปรตกอยู่ในช่วง 32 บิตการใช้งานInt, longการใช้งานอื่น โดยปกติแล้ว long จะใช้สำหรับการคำนวณทางวิทยาศาสตร์และสิ่งที่ต้องการความแม่นยำมาก (เช่นค่า pi)
ตัวอย่างของการเลือกอย่างใดอย่างหนึ่งคือกรณีของ YouTube พวกเขากำหนดตัวนับการดูวิดีโอเป็นครั้งแรกว่ามีการ
intดูมากเกินไปเมื่อมีการดูวิดีโอยอดนิยมมากกว่า 2,147,483,647 ครั้ง เนื่องจากตัวIntนับไม่สามารถจัดเก็บค่าใด ๆ เกินกว่าช่วงได้ YouTube จึงเปลี่ยนตัวนับเป็นตัวแปร 64 บิตและตอนนี้สามารถนับจำนวนการดูได้ถึง 9,223,372,036,854,775,807 ครั้ง ทำความเข้าใจข้อมูลของคุณและเลือกประเภทที่เหมาะกับตัวแปร 64 บิตจะใช้หน่วยความจำมากกว่าตัวแปร 32 บิตเป็นสองเท่า
เมื่อพูดถึงการใช้ตัวเลขที่ยาวมากซึ่งอาจเกิน 32 บิตในการแสดงคุณอาจใช้ long เพื่อให้แน่ใจว่าคุณจะไม่มีพฤติกรรมแปลก ๆ
จาก Java 5 คุณสามารถใช้คุณสมบัติในการชกมวยและนอกชกมวยเพื่อให้การใช้ int และ Integer เหมือนกันโดยสิ้นเชิง หมายความว่าคุณสามารถทำได้:
int myInt = new Integer(11);
Integer myInt2 = myInt;
ทั้งในและนอกมวยช่วยให้คุณสามารถสลับไปมาระหว่าง int และจำนวนเต็มโดยไม่ต้องแปลงใด ๆ เพิ่มเติม (เหมือนกันสำหรับLong, Double, Shortเกินไป)
คุณอาจใช้ intตลอดเวลา แต่Integerมีวิธีการช่วยเหลือบางอย่างที่สามารถช่วยคุณดำเนินการบางอย่างที่ซับซ้อนด้วยจำนวนเต็ม (เช่นInteger.parseInt(String))
a) object Class "Long" กับ primitive type "long" (อย่างน้อยก็ใน Java)
b) มีขนาดหน่วยความจำที่แตกต่างกัน (แม้ไม่ชัดเจน) ของประเภทดั้งเดิม:
Java - ชัดเจนทั้งหมด: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
ค .. แค่ยุ่ง: https://en.wikipedia.org/wiki/C_data_types