Khởi tạo một đoạn dài trong Java


213

Nguyên thủy loại dữ liệu - oracle doc nói phạm vi longtrong Java là -9,223,372,036,854,775,808để 9,223,372,036,854,775,807. Nhưng khi tôi làm một cái gì đó như thế này trong nhật thực của tôi

long i = 12345678910;

nó hiển thị The literal 12345678910 of type int is out of rangelỗi "".

Có 2 câu hỏi.

1) Làm thế nào để tôi khởi tạo longgiá trị 12345678910?

2) Có phải tất cả các chữ số theo mặc định của loại int?


Và làm thế nào về việc khởi tạo một Long?
Wolfgang Fahl

1
@WolfgangFahl Các quy tắc tương tự cho Long- do tự động đấm bốc, bạn có thể sử dụng Long i = 12345678910Lhoặc sử dụng Long i = Long.valueOf(12345678910L)cho những trường hợp bạn không thể sử dụng tự động đấm bốc.
Dorian Gray

Câu trả lời:


422
  1. Bạn nên thêm L: long i = 12345678910L;.
  2. Đúng.

BTW: nó không phải là chữ L viết hoa, nhưng chữ thường bị nhầm lẫn với 1nhiều lần :).


3
Chỉ trong trường hợp một người nào đó đã tự hỏi: cùng đi cho hex, ví dụ:0x200000000L
user149408

@Victor Long.valueOf (dài) trả về một Long, không phải là một nguyên thủy dài. Giải pháp của MByD tránh phụ thuộc vào quyền anh tự động.
gouliej

@ user149408 Có lẽ ý bạn là 0x20000000Lgì?
Sao Diêm Vương

2
@Pluto 0x20000000Lsẽ hoạt động nhưng vẫn có thể được biểu thị bằng int(số nguyên 32 bit), do đó 0x20000000cũng sẽ hoạt động tốt. 0x200000000Lphá vỡ ranh giới đó, làm cho dấu vết Lcần thiết.
user149408

58
  1. Bạn cần thêm Lký tự vào cuối số để làm cho Java nhận ra nó dài.

    long i = 12345678910L;
  2. Đúng.

Xem Kiểu dữ liệu nguyên thủy có nội dung "Một số nguyên bằng chữ có kiểu dài nếu kết thúc bằng chữ L hoặc l; nếu không thì nó thuộc kiểu int."


39

Bạn cần thêm chữ hoa Lở cuối như vậy

long i = 12345678910L;

Điều tương tự cũng đúng với float 3.0f

Mà nên trả lời cả hai câu hỏi của bạn


15

Để khởi tạo lâu, bạn cần nối "L" vào cuối.
Nó có thể là chữ hoa hoặc chữ thường.

Tất cả các giá trị số theo mặc định int. Ngay cả khi bạn thực hiện bất kỳ thao tác bytenào với bất kỳ số nguyên nào,byte trước tiên sẽ được thăng cấp intvà sau đó mọi thao tác được thực hiện.

Thử cái này

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

Bạn gặp lỗi vì 2theo mặc định int.
Do đó bạn đang cố gắng nhân lên bytevới int. Do đó, kết quả được đánh máy intmà không thể được gán lại byte.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.