2011-10-28 44 views
28

Điều này có thể được hỏi ở đâu đó nhưng tôi không thể tìm thấy nó. Ai đó có thể làm rõ tại sao mã này biên dịch và in ra 1?Hành vi java lạ với phôi đến kiểu nguyên thủy

long i = (byte) + (char) - (int) + (long) - 1; 
System.out.println(i); 
+0

điều gì lạ ở đây? –

+1

@PrinceJohnWesley: vâng, có vẻ lạ nhỉ? Mặc dù câu trả lời là đơn giản, và chúng tôi hiểu nó ngay sau khi tôi đăng câu hỏi. –

+1

* I * nghĩ có vẻ lạ; Tôi không có bất kỳ vấn đề tin rằng ai đó sẽ nhìn vào đó và không tin rằng nó thậm chí là hợp pháp Java. –

Trả lời

42

Nó đang được phân tích như thế này:

long i = (byte)(+(char)(-(int)(+(long)(-1)))); 

nơi tất cả các +- nhà khai thác được unary + hoặc -.

Trong trường hợp này, 1 bị phủ nhận hai lần, do đó, nó in ra dưới dạng 1.

5

Vì cả hai '+' và '-' là unary operators và các phôi hoạt động trên các toán hạng của những đơn vị đó. Phần còn lại là toán.

5

khai thác unary và đúc :)

1 là hợp pháp

(byte) + 1 được đúc +1 đến một byte.

Lén lút! Làm tôi suy nghĩ.