บางครั้งฉันเห็นว่า API ใช้long
หรือLong
หรือint
หรือInteger
และฉันไม่สามารถเข้าใจได้ว่ามีการตัดสินใจอย่างไร
เมื่อไหร่ควรเลือกอะไร?
บางครั้งฉันเห็นว่า API ใช้long
หรือLong
หรือint
หรือInteger
และฉันไม่สามารถเข้าใจได้ว่ามีการตัดสินใจอย่างไร
เมื่อไหร่ควรเลือกอะไร?
คำตอบ:
Long
เป็นObject
รูปแบบของlong
และเป็นรูปแบบของวัตถุInteger
int
long
ใช้64 บิต int
ใช้ 32 บิตและเพื่อให้สามารถเก็บตัวเลขได้ถึง± 2 พันล้าน (-2 วันที่ 31ที่จะ +2 31 -1)
คุณควรใช้long
และint
นอกจากที่คุณจะต้องทำให้การใช้วิธีการสืบทอดมาจากเช่นObject
เมธอดมักใช้เวอร์ชันบรรจุกล่อง ( -wrapped) เนื่องจากต้องใช้งานได้กับทุกประเภทและประเภทดั้งเดิมเช่นหรือไม่ใช่ไฟล์.hashcode
Java.util.collections
Object
Object
int
long
Object
ความแตกต่างอีกประการหนึ่งคือlong
และint
เป็นpass-by-valueในขณะที่Long
และInteger
เป็นค่าpass-by-referenceเช่นเดียวกับ Java ที่ไม่ใช่แบบดั้งเดิมทั้งหมด ดังนั้นหากเป็นไปได้ที่จะแก้ไขLong
หรือInteger
(ไม่เป็นเช่นนั้นก็ไม่สามารถเปลี่ยนรูปได้โดยไม่ต้องใช้รหัส JNI) ก็จะมีเหตุผลอื่นที่จะใช้อีกอันหนึ่ง
ความแตกต่างที่สุดท้ายคือว่าLong
หรืออาจจะเป็นInteger
null
มีสองสิ่งที่คุณไม่สามารถทำได้กับประเภทดั้งเดิม:
null
ค่าObject
sหากคุณไม่ต้องการสิ่งเหล่านี้คุณควรเลือกประเภทดั้งเดิมเนื่องจากต้องการหน่วยความจำน้อยกว่า
int
เมื่อถือตัวเลขint
เล็กเกินไปให้ใช้ไฟล์long
long
เล็กเกินไปให้ใช้BigInteger
Collection
, การจัดการnull
, ... ) ให้ใช้Integer
/ Long
แทนAn int
คือจำนวนเต็ม 32 บิต a long
คือจำนวนเต็ม 64 บิต จะใช้อันไหนขึ้นอยู่กับจำนวนตัวเลขที่คุณคาดว่าจะใช้ได้
int
และlong
เป็นประเภทดั้งเดิมในขณะที่Integer
และLong
เป็นวัตถุ ประเภทดั้งเดิมมีประสิทธิภาพมากกว่า แต่บางครั้งคุณต้องใช้วัตถุ ตัวอย่างเช่นคลาสคอลเลกชันของ Java สามารถใช้ได้กับอ็อบเจ็กต์เท่านั้นดังนั้นหากคุณต้องการรายการจำนวนเต็มคุณต้องทำให้เป็นList<Integer>
เช่น (คุณไม่สามารถใช้int
ใน a List
โดยตรงได้)
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long
64 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