2013-06-26 26 views
5

Tôi đã một thuật toán viết bằng Java mà lặp đi lặp lại không đúc nguyên thủy như:Chi phí cho đúc loại nguyên thủy trong Java

int val = (int) Math.max(val1, val2); 

Kể từ khi tôi đang cố gắng để cải thiện hiệu suất của thuật toán, tôi muốn biết nếu lặp đi lặp lại việc đúc ở trên phải tránh, ví dụ bằng cách sử dụng một cái gì đó như:

int val = ((val1>val2) ? val1 : val2); 

PS: Tôi đã tìm kiếm trong Stackoverflow nhưng tôi không tìm thấy câu trả lời tương tự.

+1

bạn không cần phải truyền, nó [trả về một int] (http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#max%28int,%20int%29) –

+2

@KarthikT Bạn giả sử cả hai 'val1' và' val2' là 'int' – Jonathan

+0

@ Jonathan không phải là cả hai ví dụ giống hệt nhau trong trường hợp đó? Nếu bạn cần phải đúc trong một, bạn cần phải đúc trong khác? Không Java tự động xử lý downcast này? –

Trả lời

5

Giả sử vì mục đích thảo luận val1 và val2 là cả hai kích thước và bạn vẫn muốn nhận được int (vì bạn nói đây chỉ là một ví dụ).

tôi sẽ đề nghị đầu tiên để so sánh số lượng thời gian nó sẽ đưa bạn đến gọi

double val = Math.max(val1, val2) 

vs:

int val = (int) Math.max(val1, val2); 

Nếu bạn chạy điểm chuẩn này một cách chính xác (có nghĩa là làm wormup trong JVM và biện pháp số lượng thời gian cho hàng triệu cuộc gọi) nhiều khả năng bạn sẽ thấy lượng thời gian trong dàn diễn viên là neglilibe so với Math.max()

Nói chung, trước khi làm cho mã ít đọc được và phức tạp hơn vì lợi ích của hiệu suất, đầu tiên bạn cần phải biết rằng hiệu suất đạt được là có thật.

+0

Cảm ơn bạn! Chính xác những gì tôi đã yêu cầu! –