2013-09-27 55 views
51

Đây là mã tôi phải tìm ra nó như thế nào là nó có thể. Tôi có một đầu mối nhưng tôi không biết làm thế nào để làm điều đó. Tôi nghĩ rằng đó là về số âm và dương và có thể là các biến số thay đổi. Tôi là một người mới bắt đầu tôi nhìn giải pháp ở khắp mọi nơi nhưng tôi không thể tìm thấy bất cứ điều gì có thể sử dụng.Làm cách nào để "a <= b && b <= a && a! = B" là đúng?

câu hỏi là: Bạn cần khai báo và khởi tạo hai biến. Điều kiện if phải đúng.

mã:

if(a <= b && b <= a && a!=b){ 
     System.out.println("anything..."); 
} 

Tôi đánh giá cao bạn dành thời gian.

+1

cho 'int', tôi không nghĩ' if' từng đánh giá thành 'true' –

+0

Tôi sẽ không ngạc nhiên nếu có sự kết hợp của các số dấu phẩy động nơi hoạt động này. – Thilo

+0

Tôi nhìn vào -0F và 0F, nhưng họ sẽ không làm điều đó. Tôi nghĩ Henry là câu trả lời dự định. – erickson

Trả lời

92

Điều này là không thể với các kiểu nguyên thủy. Bạn có thể đạt được điều đó với Số nguyên đóng hộp:

Integer a = new Integer(1); 
Integer b = new Integer(1); 

Các <=>= so sánh sẽ sử dụng giá trị không có hộp bọc 1, trong khi != sẽ so sánh các tài liệu tham khảo và sẽ thành công vì chúng là đối tượng khác nhau.

+5

Những sự tinh tế trong các tính năng mới được bắt đầu vào Java 5 chỉ là khủng khiếp ... Điều gì có thể gây ra lỗi. – Thilo

+5

@Thilo Có một lý do chúng được gọi là sự tinh tế.Tôi không nghĩ có điều gì sai trái với sự tinh tế ở trên. –

+2

@Thilo đồng ý, auto-boxing và -unboxing chỉ thuận tiện nếu bạn biết chính xác mình đang làm gì. – Henry

20

này hoạt động quá:

Integer a = 128, b = 128; 

này không:

Integer a = 127, b = 127; 

Auto-boxing một int là cú pháp đường cho một cuộc gọi đến Integer.valueOf(int). Hàm này sử dụng bộ nhớ cache cho các giá trị nhỏ hơn 128. Do đó, việc gán 128 không có một lần truy cập bộ nhớ cache; nó tạo ra một cá thể Integer mới với mỗi thao tác tự động đấm bốc và a != b (so sánh tham chiếu) là đúng.

Bài tập 127 có một lần truy cập bộ nhớ cache và kết quả là các đối tượng Integer thực sự là cùng một thể hiện từ bộ nhớ cache. Vì vậy, so sánh tham chiếu a != b là sai.

+5

Cần lưu ý rằng ranh giới * chính xác * của nội dung được lưu trữ không được chỉ định trong thông số. –

+1

@JoachimSauer Khoảng thời gian [-128, 127] phải được lưu trong bộ nhớ cache, theo thông số kỹ thuật, vì vậy 127, chẳng hạn, sẽ luôn thất bại. Giá trị ngoài khoảng thời gian đó * có thể * được lưu vào bộ nhớ cache, điều này sẽ gây ra lỗi. – erickson

11

Một trường hợp hiếm hoi khác cho biến lớp có thể là một chuỗi khác có thể thay đổi giá trị ab trong khi so sánh đang thực hiện.

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