Đầu tiên, một số nền tảng: Tôi là một giáo viên đào tạo CNTT và tôi đang cố gắng giới thiệu các toán tử boolean của java cho lớp 10 của tôi. Giáo viên cố vấn của tôi đã xem qua một bảng tính mà tôi đã chuẩn bị và nhận xét rằng tôi có thể cho phép họ sử dụng chỉ một & & | để biểu thị các toán tử, bởi vì họ "làm điều tương tự".
Tôi nhận thức được sự khác biệt giữa & và &&.
& là một toán tử bitwise dự định sử dụng giữa các số nguyên, để thực hiện "twiddling".
&& là toán tử có điều kiện dành cho sử dụng giữa các giá trị boolean.
Để chứng minh điểm mà các toán tử này không phải lúc nào cũng "làm điều tương tự", tôi đặt ra để tìm một ví dụ trong đó sử dụng bitwise giữa các giá trị boolean sẽ dẫn đến lỗi. Tôi tìm thấy ví dụ này
boolean bitwise;
boolean conditional;
int i=10, j=12;
bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
i=10;
bitwise = (i>j) & (i=3) > 5; // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i>j) && (i=3) > 5; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
Ví dụ này cho thấy rằng nếu một giá trị phải được thay đổi bởi nửa sau của biểu thức, thì điều này sẽ dẫn đến sự khác biệt giữa các kết quả, vì bitwise là một toán tử háo hức, trong khi điều kiện hoạt động như một mạch ngắn (không đánh giá thứ hai một nửa, nếu nửa đầu là sai trong trường hợp && và đúng trong trường hợp | |).
Tôi có một vấn đề với ví dụ này. Tại sao bạn muốn thay đổi một giá trị cùng lúc với việc bạn so sánh nó? Nó dường như không phải là một cách mạnh mẽ để viết mã. Tôi luôn không thích thực hiện nhiều thao tác trong một dòng trong mã sản xuất của mình. Có vẻ như một thứ gì đó là "cao bồi mã hóa" không có lương tâm về khả năng duy trì mã của anh ta sẽ làm. Tôi biết rằng trong một số tên miền mã cần phải gọn nhất có thể, nhưng chắc chắn đây là một thực tế kém nói chung?
Tôi có thể giải thích sự lựa chọn của mình về việc khuyến khích sử dụng && và || trên & và | bởi vì đây là một quy ước mã hóa được chấp nhận trong công nghệ phần mềm .
Nhưng ai đó có thể vui lòng cho tôi một ví dụ tốt hơn, thậm chí trong thế giới thực, về việc sử dụng toán tử bitwise trong biểu thức điều kiện không?