เริ่มต้นความยาวใน Java


213

ดึกดำบรรพ์ชนิดข้อมูล - Oracle docกล่าวว่าช่วงของlongใน Java เป็นไป-9,223,372,036,854,775,808 9,223,372,036,854,775,807แต่เมื่อฉันทำอะไรแบบนี้ในคราส

long i = 12345678910;

มันแสดงThe literal 12345678910 of type int is out of rangeข้อผิดพลาด ""

มี 2 ​​คำถาม

1) ฉันจะเริ่มต้นlongด้วยค่าได้12345678910อย่างไร

2) ตัวอักษรตัวเลขทั้งหมดเป็นค่าเริ่มต้นของประเภทintหรือไม่


และวิธีการเริ่มต้น Long?
Wolfgang Fahl

1
@ WolfgangFahl กฎเดียวกันสำหรับLong- เนื่องจาก auto-Boxing คุณสามารถใช้Long i = 12345678910Lหรือใช้Long i = Long.valueOf(12345678910L)สำหรับกรณีเหล่านั้นที่คุณไม่สามารถใช้ auto-boxing
Dorian Gray

คำตอบ:


422
  1. คุณควรเพิ่มL: long i = 12345678910L;.
  2. ใช่.

BTW: มันไม่จำเป็นต้องเป็นตัวพิมพ์ใหญ่ L แต่ตัวพิมพ์เล็กจะสับสน1หลายครั้ง :)


3
ในกรณีที่มีคนสงสัย: เช่นเดียวกันสำหรับ hex เช่น0x200000000L
user149408

@Victor Long.valueOf (long) ส่งคืน Long ไม่ใช่ความยาวดั้งเดิม โซลูชันของ MByD หลีกเลี่ยงการพึ่งพามวยอัตโนมัติ
gouessej

@ user149408 คุณอาจหมายถึง0x20000000Lอะไร
พลูโต

2
@Pluto 0x20000000Lจะใช้งานได้ แต่ยังคงสามารถแสดงได้ด้วยint(จำนวนเต็ม 32 บิต) ดังนั้น0x20000000ก็ใช้ได้เช่นกัน 0x200000000Lแบ่งขอบเขตนั้นทำให้การติดตามLจำเป็น
user149408

58
  1. คุณต้องเพิ่มLตัวอักษรไปยังจุดสิ้นสุดของหมายเลขเพื่อให้จาวารับรู้เป็นเวลานาน

    long i = 12345678910L;
  2. ใช่.

ดูประเภทข้อมูลดั้งเดิมที่ระบุว่า "ตัวอักษรจำนวนเต็มเป็นประเภทยาวถ้าลงท้ายด้วยตัวอักษร L หรือ l มิฉะนั้นจะเป็นประเภท int"


39

คุณต้องเพิ่มตัวพิมพ์ใหญ่Lในตอนท้ายเช่นนั้น

long i = 12345678910L;

เหมือนกันจะเป็นจริงสำหรับลอยด้วย 3.0f

ซึ่งควรตอบคำถามของคุณทั้งสอง


15

ในการเริ่มต้นใช้งานนานคุณต้องผนวก "L" ต่อท้าย
มันอาจเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก

intทุกค่าตัวเลขตามค่าเริ่มต้น แม้ว่าคุณจะดำเนินการใด ๆbyteกับจำนวนเต็มใด ๆbyteได้รับการเลื่อนตำแหน่งเป็นครั้งแรกintแล้วจึงดำเนินการใด ๆ

ลองสิ่งนี้

byte a = 1; // declare a byte
a = a*2; //  you will get error here

คุณจะได้รับข้อผิดพลาดเพราะเป็นค่าเริ่มต้น2 ด้วยเหตุนี้คุณกำลังพยายามที่จะคูณด้วย ดังนั้นผลลัพธ์จะถูกพิมพ์ไปที่ไม่สามารถกำหนดกลับไปได้int
byteintintbyte

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.