2015-01-06 21 views
15

nhầm một gạch đã được thêm vào như dưới đây:gạch giữa chữ số

int i = 1_5; 

Nhưng không có lỗi biên dịch. Tại sao vậy? Đầu ra sẽ đến như thể gạch dưới bị bỏ qua. Vậy tại sao lại có tính năng như vậy trong Java?

+2

hợp lệ kể từ Java 7 ... – fge

+5

nó một tính năng. Giúp với số lượng lớn. –

Trả lời

27

Xem Underscores in Numeric Literals:

Trong Java SE 7 và sau đó, bất kỳ số lượng ký tự gạch dưới (_) có thể xuất hiện bất cứ nơi nào giữa chữ số trong một chữ số. Tính năng này cho phép bạn, ví dụ: để phân tách các nhóm chữ số bằng số chữ, có thể cải thiện khả năng đọc mã của bạn.

Bạn không đưa ra ví dụ điển hình vì 15 có thể đọc được ngay cả khi không tách các chữ số thành 1_5. Nhưng lấy ví dụ số: 100000000000, thật khó để biết nó là gì mà không cần đếm chữ số, vì vậy bạn có thể làm:

100_000_000_000 

giúp dễ dàng xác định số.

Trong ví dụ của bạn, hãy thử:

int i = 1_5; 
System.out.println(i); //Prints 15 
+0

Nếu chỉ có một số cách chúng tôi có thể đưa ra các nhận xét bên cạnh mã:/ – musefan

+5

Chúng tôi không được cung cấp ý kiến ​​để làm rõ ngữ nghĩa ngôn ngữ, thay vào đó chúng ta phải học ngôn ngữ (hoặc sử dụng google/stackoverflow). – Gio

5

Đó là tính năng mới, có hiệu lực kể từ Java 7. Nó cải thiện khả năng đọc các giá trị văn chương của mình.

Theo OCA_Java_SE_7_Programmer_I_Certification_Guide_Exam_1Z0-803 Mala Gupta:

Chú ý đến việc sử dụng các dấu gạch dưới trong các giá trị văn chương số. Dưới đây là một số trong số các quy tắc:

1) Bạn không thể bắt đầu hoặc kết thúc giá trị bằng dấu gạch dưới.

2) Bạn không thể đặt dấu gạch dưới ngay sau các tiền tố 0b, 0B, 0x, và 0X, được sử dụng để xác định giá trị nhị phân và hệ thập lục phân theo giá trị .

3) Bạn có thể đặt dấu gạch dưới ngay sau tiền tố 0, được sử dụng để xác định giá trị bát phân.

4) Bạn không thể đặt dấu gạch dưới trước hậu tố L (hậu tố L là được sử dụng để đánh dấu giá trị bằng chữ).

5) Bạn không thể sử dụng dấu gạch dưới ở các vị trí mà một chuỗi các chữ số được mong đợi.

ví dụ hợp lệ:

long baseDecimal = 100_267_760; 
long octVal = 04_13; 
long hexVal = 0x10_BA_75; 
long binVal = 0b1_0000_10_11; 

ví dụ không hợp lệ:

int intLiteral = _100; 
int intLiteral2 = 100_999_; 
long longLiteral = 100_L; 
Các vấn đề liên quan