Đ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);
Đ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);
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 +
và -
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
.
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.
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ĩ.
điều gì lạ ở đây? –
@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. –
* 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. –