2014-09-27 21 views
5

Trong khi chơi xung quanh tôi gặp một cái gì đó, mà dường như xa lạ với tôi:nhân vật số học trong Java

Sau đây không phải là mã Java hợp lệ:

char x = 'A'; 
x = x + 1; //possible loss of precision 

vì một trong những toán hạng ist một số nguyên và do đó toán hạng khác được chuyển thành số nguyên. Không thể gán kết quả cho biến ký tự ... trong khi

char x = 'A'; 
x += 1; 

là hợp lệ, vì số nguyên kết quả là - tự động - được chuyển đổi thành ký tự.

Cho đến nay rất tốt. Điều này có vẻ rõ ràng với tôi nhưng ... tại sao mã Java hợp lệ sau đây?

char x; 
x = 'A' + 1; 
+0

@Sotirios Rất cám ơn câu trả lời rất nhanh. Mọi thứ rõ ràng hơn với tôi ... – megamin

+0

@ sol4me: cảm ơn vì gợi ý 'nhân vật cuối cùng' ... – megamin

+0

@Alboz: Ban đầu tôi không biết cách làm điều này. Bây giờ nó được thực hiện ... – megamin

Trả lời

1

'A' + 1 

là một biểu thức hằng. Nó được biết tại thời gian biên dịch mà kết quả sẽ phù hợp trong một char.

Trong khi

'A' + 787282; 

sẽ không phù hợp trong một char và do đó sẽ gây ra một lỗi biên dịch.

1

Nó hợp lệ vì nó là biểu thức hằng số thời gian biên dịch. Đã nó được

char x; 
char y = 'A'; 
x = y + 1; 

Trình biên dịch sẽ cung cấp cho bạn một lỗi thời gian biên dịch, bởi vì bây giờ nó không phải là một thời gian biên dịch biểu thức hằng số. Nhưng nếu bạn sẽ biến biến y thành final thì biểu thức sẽ chuyển thành hằng số thời gian biên dịch, do đó mã dưới đây sẽ biên dịch.

char x; 
final char y = 'A'; 
x = y + 1; 

đạo đức của câu chuyện là khi bạn gán số nguyên cho một char, trình biên dịch sẽ cho phép nó miễn là nó là trình biên dịch hằng số thời gian và nó sẽ phù hợp trong phạm vi của char.

Các vấn đề liên quan