nếu phương thức trả về Double, tại sao chúng ta gọi phương thức "doubleValue" trên đó? nó đã trả về gấp đôi và tính toán, xuất hiện để đánh giá chính xác.Double vs doubleValue trong Java
Trả lời
Trước khi Java 1.5 tự động đấm bốc (và unboxing) không tồn tại trong Java. Vì vậy, bạn sẽ cần điều này để trích xuất nguyên thủy cơ bản từ một Double.
Nếu bạn không quen với tự động đấm bốc, bạn có thể đọc thêm tại đây. http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html
Bạn gọi 'doubleValue' trên đối tượng Double để chuyển đổi từ đối tượng được đóng hộp thành kiểu dữ liệu nguyên thủy. Vì hầu hết thời gian Double được tự động unboxed thành double, bạn thường không cần phải làm điều này, nhưng nếu bạn muốn rõ ràng trong chuyển đổi của mình, bạn có thể gọi phương thức này.
Bạn muốn gọi doubleValue
nếu bạn cần lấy số double
từ số Double
. Trước đây là một kiểu nguyên thủy, trong khi kiểu sau là một kiểu đối tượng bao bọc, về cơ bản gói gọn một giá trị nguyên thủy bên trong một đối tượng bất biến. Nếu có thể (và tôi nói điều này mà không biết chính xác mục đích của mã của bạn), hãy sử dụng double
cho tất cả các tính toán của bạn; chỉ sử dụng Double
nếu bạn cần lưu trữ các giá trị trong một số Collection
hoặc Map
; đó là vì các loại đối tượng tiêu thụ nhiều bộ nhớ hơn và có thể phải chịu các hoạt động đúc.
Dễ dàng nhầm lẫn double
với Double
(điều tương tự áp dụng cho các loại nguyên thủy khác so với loại trình bao bọc), vì trình biên dịch sẽ tự động chuyển đổi từ người này sang người khác khi cần trong quá trình được gọi là tự động đấm bốc -unboxing), vì vậy bạn phải cẩn thận một chút để sử dụng đúng loại.
Và chỉ để thêm vào này một chút, và một cách rõ ràng nhà nước nó: toán học hoạt động và thử nghiệm (số học, so sánh, vv) không thể được thực hiện với 'Double' s, chỉ 'double' s. – yshavit
doubleGiá trị trả về số nguyên thủy từ đối tượng Double. Tùy thuộc vào kịch bản, bạn sẽ muốn nhận được gấp đôi của một đôi.
- 1. Ngăn vòng tròn trong String.format ("%. 2f", doubleValue) trong Java
- 2. Cấu trúc vs test double in ruby
- 3. double not (!!) vs cưỡng chế kiểu trong JavaScript
- 4. Junit chênh lệch giữa assertEquals (Double, Double) và assertEquals (double, double, đồng bằng)
- 5. C#: double [] [] và double [,]
- 6. float vs double trên phần cứng đồ họa
- 7. Equals điều hành cho số không (BigDecimal/Double) trong Java
- 8. có cách nào để chuyển đổi từ Double sang BigInteger?
- 9. Double-Loop trong msbuild?
- 10. Double Equals (==) trong TypeScript
- 11. LBYL vs EAFP trong Java?
- 12. BufferedReader vs. RandomAccessFile trong java
- 13. Tại sao double.TryParse ("0.0000", out doubleValue) trả về false?
- 14. bash: double vs dấu ngoặc đơn trong đánh giá biểu thức kiểm tra tệp
- 15. Làm cách nào để chuyển đổi Double [] thành double []?
- 16. Java serialization vs JSON vs XML
- 17. Java: LockSupport.parkNanos vs Thread.sleep (...)
- 18. Java: ArrayBlockingQueue vs. LinkedBlockingQueue
- 19. .class vs .java
- 20. gói javax vs java
- 21. Java: Enum vs. Int
- 22. Abstraction vs Đóng gói trong Java
- 23. Javac vs Java trong classpath tùy chọn
- 24. ++ i + ++ i + ++ i trong Java vs C
- 25. java: Class.isInstance vs Class.isAssignableFrom
- 26. Java Timer vs ExecutorService?
- 27. Java HashMap vs JSONObject
- 28. Unpredictability của BigDecimal (double) constructor
- 29. MySQL double sort
- 30. Android Double Tap
Vì vậy, từ liên kết, nó gợi ý rằng bạn nên thực hiện lần truy cập hiệu suất từ tự động hộp và tự động phát. Trong một vòng lặp hiệu suất quan trọng, sau đó bạn có thể gọi myDouble.doubleValue() để tránh phải trả tiền phạt không? – MedicineMan
@MedicineMan Không, unboxing chỉ là trình biên dịch sẽ biến 'double foo = myDouble' thành' double foo = myDouble.doubleValue() 'cho bạn - gọi phương thức một cách rõ ràng không quan trọng. Phần lớn các hit hiệu suất là trong việc tạo ra đối tượng 'Double' đóng hộp ở vị trí đầu tiên (và, có thể ở mức độ thấp hơn, trong việc phải truy cập bộ nhớ heap thay vì một stack var để lấy giá trị). – yshavit
yshavit đóng đinh nó. Cách duy nhất để tránh hình phạt là tránh bất kỳ sự chuyển đổi nào giữa Double <--> double. Tuy nhiên, điều đó thường không thực tế, đặc biệt nếu bạn muốn sử dụng bất kỳ Bộ sưu tập nào. Ngoài ra, nó sẽ là một trường hợp * rất hiếm khi mà đây thực sự là một nút cổ chai hiệu suất cho một ứng dụng. – rfeak