Ai đó có thể giải thích cho tôi tại sao mã sau đây biên dịch OK trong Java?Số học số nguyên trong Java với chữ char và số nguyên
char c = 'a' + 10;
Tại sao điều này không tương đương với những điều sau đây, không biên dịch?
int i = 10;
char c = 'a' + i;
Java Language Specification (phần 3.10.1) khẳng định "Một số nguyên nghĩa đen là loại long
nếu nó được hậu tố với một lá thư ASCII L hoặc l (ell); nếu không nó là loại int
(§4.2 .1). " Phần 4.2.2 đề cập đến "Toán tử số, dẫn đến giá trị loại int
hoặc long
". Do đó, kết quả của sự bổ sung, theo hiểu biết của tôi, là một số int
, không thể được gán cho số char
biến c
.
Tuy nhiên, nó biên dịch tốt (ít nhất là trong bản phát hành Sun JDK 1.6.0 17 và trong Eclipse Helios).
Thay vì một ví dụ nhân tạo có lẽ, nhưng nó được sử dụng trong một khóa học Java giới thiệu mà tôi đã dạy, và bây giờ xảy ra với tôi rằng tôi không thực sự hiểu tại sao nó hoạt động.
Nhờ tất cả những ai đã trả lời. Đối với bất kỳ ai quan tâm, mục 5.2 của đặc tả ngôn ngữ (Chuyển đổi chuyển nhượng) thực tế nói "Ngoài ra, nếu biểu thức là một biểu thức liên tục (§15.28) của byte loại, ngắn, char hoặc int: ... có thể được sử dụng nếu loại biến là byte, ngắn hoặc char và giá trị của biểu thức hằng số là biểu thị trong loại biến. " – Ben
Nếu bạn, giống như tôi, tình cờ vấp ngã điều này bởi vì bạn muốn biết làm thế nào để thực sự chuyển đổi một char được lập chỉ mục thành một chuỗi, ở đây bạn đi; khi 'i = 2' thì' String.valueOf ((char) ('a' + i)) 'trả về chuỗi" c ". – JohnnyLambada