2010-05-06 9 views

Trả lời

10

Ở đây, bạn đang gọi hai phương thức khác nhau - Double.Equals(double)Object.Equals(object). Đối với cuộc gọi đầu tiên, int có thể chuyển đổi hoàn toàn thành double, do đó, đầu vào cho phương thức là double và nó thực hiện kiểm tra bình đẳng giữa hai số double s. Tuy nhiên, đối với cuộc gọi thứ hai, số intkhông phải được truyền tới số double, nó chỉ được đóng hộp. Nếu bạn có một cái nhìn tại các phương pháp Double.Equals(object) trong phản xạ, dòng đầu tiên là:

if (!(obj is double)) 
{ 
    return false; 
} 

vì vậy nó trở lại sai, vì đầu vào là một đóng hộp int, không phải là một đóng hộp double.

Bắt tốt!