2013-05-03 48 views
5

Tôi đã học được rằng i+=2 là viết tắt của i=i+2. Nhưng bây giờ đang nghi ngờ nó. Đối với đoạn mã sau, những kiến ​​thức trên nắm giữ không tốt:Toán tử gán tay ngắn, + =, Ý nghĩa thực sự?

byte b=0; b=b+2; //Error:Required byte, Found int

Đoạn mã trên là chính đáng, như 2int loại và biểu thức trả về giá trị int.

Nhưng, đoạn code sau chạy tốt:

byte b=0; b+=2; //b stores 2 after += operation

này buộc tôi phải nghi ngờ rằng các nhà điều hành += ngắn tay có phần hơn hơn tôi biết. Hãy khai sáng cho tôi.

+0

Xem: http://stackoverflow.com/questions/7038012/typecasting-with-shorthand-operators –

+2

Không sử dụng trả lời khi có câu trả lời hay. Đánh dấu vào [this one] (http://stackoverflow.com/questions/8710619/java-operator). Câu hỏi này được đề cập ở đó. – Gamb

Trả lời

10

Khi nghi ngờ, bạn luôn có thể kiểm tra Đặc tả ngôn ngữ Java. Trong trường hợp này, phần có liên quan là 15.26.2, Toán tử chuyển nhượng hợp chất.

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

Vì vậy, bạn đã gần như chính xác, ngoại trừ một dàn diễn viên cũng được thêm vào. Trong trường hợp của bạn: b+=2; đủ điều kiện để b=(byte)(b+2);

+0

rõ ràng và súc tích +1 –

+0

Theo điều này sẽ không 2 vẫn được coi là một int? Điền vào chỗ dành sẵn, tôi đọc đó là b = (byte) b + 2; –

+0

Vì vậy, 'i + = 2' đủ điều kiện để' i = (loại i) (i + 2) '. Cảm ơn :) –

0

Đến từ nền C++, tôi có thể cố gắng xác nhận rằng khái niệm này tương tự. Toán tử += được định nghĩa là một phương thức của đối tượng ở bên trái của nó, truyền trong đối tượng sang bên phải của nó làm đối số. Điều này làm cho nó trở nên tầm thường đối với người viết ngôn ngữ để ném vào những thứ như sửa lỗi và sửa lỗi tương thích. Điều duy nhất, theo như tôi biết, Java không cho phép người dùng quá tải các chức năng của nhà điều hành

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