2013-06-11 36 views
6

Như tiêu đề thực sự ... nếu lớp X được khai báo là strictfp và các phương thức gọi trong lớp Y, độ nghiêm ngặt sẽ được thực thi hay điều này chỉ áp dụng cho mã riêng của X?Việc khai báo một phương thức trung bình của lớp Java có nghĩa là các phương thức mà nó gọi trong các lớp khác cũng là strictfp không?

Ngoài ra, nếu tôi tính giá trị theo phương pháp lớp strictfp và chuyển giá trị đó thành phương thức không nghiêm ngặt, giá trị vẫn 'an toàn' nếu không có tính toán thêm nào được thực hiện với nó?

Trả lời

4

Theo như tôi hiểu strictfp được giới hạn trong phạm vi được đánh dấu bằng từ khóa này. Điều này có nghĩa là nó gây ra các tính toán của lớp hoặc phương thức được đánh dấu là có thể di chuyển được.

Nó không thể truyền hiệu ứng sang mã được tham chiếu. Ví dụ: nếu foo()strictfp nhưng nó gọi bar() từ một số lớp khác không phải là strictfp, các tính toán bên trong bar() sẽ không thể di chuyển được, nhưng các tính toán bên trong foo() sẽ là. Vì vậy, nếu kết quả của bar() được sử dụng trong foo() kết quả tổng thể có thể không di động.

public strictfp double foo() { 
    return bar() * 3.1415926; 
} 
public double bar() { 
    return 2.718281828 * 2.0; 
} 

Kết quả này 2.718281828 * 2.0 không thể di chuyển, nhưng nhân của nó là 3.1415926.

+0

tôi thậm chí không biết những gì các phương tiện di động. – fungusanthrax

+0

Nếu bạn chạy mã này ở một nơi khác - kết quả sẽ luôn như cũ, bất kể bạn sử dụng hệ điều hành nào hay bộ xử lý nào, v.v. – bartektartanus

0

Nó chỉ áp dụng cho các biểu thức trong các phương thức được khai báo trong lớp đó.

Từ bài viết jGuru What is the strictfp modifier for? When would I consider using it?:

Từ khóa strictfp có thể được áp dụng cho cả hai lớp và phương pháp. Đối với các lớp (và các giao diện), nó chỉ định rằng tất cả các biểu thức trong tất cả các phương thức của lớp là FP-strict.

Để trả lời câu hỏi thứ hai của bạn: có, giá trị điểm động sẽ "an toàn" khi không còn tính toán thêm nữa, vì strictfp chỉ áp dụng cho các biểu thức.

liên quan: When should I use the "strictfp" keyword in java?

2

Từ Java Language Specification:

Hiệu quả của modifier strictfp là làm cho tất cả các phao hoặc biểu đôi trong khai báo lớp (kể cả trong initializers biến, initializers dụ, initializers tĩnh, và nhà thầu) được rõ ràng FP-nghiêm ngặt.

[tôi nhấn mạnh]

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