Tôi đang chuyển đổi thủ công mã từ Java (1.6) sang C# và tìm một số khó khăn với hành vi của nguyên thủy (int và double). Trong C# có vẻ như hầu hết tất cả các chuyển đổi xảy ra tự độngLàm autoboxing và unboxing hoạt động khác nhau trong Java và C#
List<double> list1 = new List<double>(); // legal, C#
double d0 = 3.0;
list1.Add(d0); // legal, C#
Double dd = 2.3f; // legal, C#
list1.Add(dd); // legal, C#
List<Double> list2 = new List<Double>(); // legal, C#
double d1 = 3.0;
list2.Add(d1); // legal, C#
list2.Add(2.0); // legal, C#
double d2 = list2.get(0); // legal, C#
nhưng trong Java chỉ có một số được phép
List<double> list1 = new ArrayList<double>(); // illegal, Java
List<Double> list2 = new ArrayList<Double>(); // legal, Java
double d1 = 3.0;
list2.add(d1); // legal, Java
list2.add(2.0); // legal, Java
double d2 = list2.get(0); // legal, Java
Tôi muốn được biết ơn đối với một hệ thống phân tích sự khác biệt và bất kỳ lý do cơ bản.
Tôi đã có ấn tượng rằng Danh sách tồn tại lâu trước khi xóa Erasure bằng Java hoặc tôi có hiểu lầm những gì bạn đang nói không? –
RHSeeger
@RHSeeger, Danh sách là Loại chung. Generics trong Java ở đâu/được thực hiện với Type Erasure. Vì vậy, điều này ngụ ý rằng Danh sách đã không tồn tại trước khi loại Erasure (ít nhất là với các tham số Type). Lưu ý rằng, Danh sách sẽ được dịch sang Danh sách loại thô. –