2012-05-14 85 views
48

Tôi muốn chuyển đổi String thành kiểu dữ liệu Double. Tôi không biết mình có nên sử dụng parseDouble hoặc valueOf hay không.Sự khác nhau giữa Double.parseDouble (String) và Double.valueOf (String) là gì?

Sự khác biệt giữa hai phương pháp này là gì?

+0

có thể trùng lặp của [Double.valueOf (s) vs. Double.parseDouble] (http://stackoverflow.com/questions/7255078/double-valueofs-vs-double-parsedouble) –

+2

liên kết này bị đóng vì nó là một câu trả lời của tôi :) – breceivemail

Trả lời

59

parseDouble trả về một nguyên thủy kép có chứa các giá trị của chuỗi:

Trả khởi tạo giá trị đại diện bởi các chuỗi chỉ định một đôi mới, như thực hiện theo phương pháp valueOf của lớp kép.

valueOf trả về trường hợp kép, nếu đã lưu trong bộ nhớ cache, bạn sẽ nhận được cùng một phiên bản được lưu trong bộ nhớ cache.

Trả về trường hợp Double biểu thị giá trị kép được chỉ định. Nếu một trường hợp Double mới là không cần thiết, phương pháp này thường là được sử dụng ưu tiên cho hàm tạo Double (double), vì phương pháp này có khả năng mang lại hiệu suất thời gian và không gian tốt hơn đáng kể.

Để tránh việc tạo ra một trường hợp đối tượng đúp mới, bạn thường nên sử dụng valueOf

+2

+1 gia đình của phương thức 'valueOf()' được ưu tiên vì lý do này ... –

+5

như bạn đã nói tôi nghĩ parseDouble() được ưu tiên. tại sao valueOf()? – breceivemail

+2

Bản chỉnh sửa không phải của tôi và không hợp lệ, tôi sẽ quay lại – MByD

0

Tài liệu cho parseDouble() nói "Trả về giá trị mới được khởi tạo thành giá trị được biểu thị bằng chuỗi được chỉ định, được thực hiện bằng phương thức valueOf của lớp Double.", Vì vậy chúng phải giống nhau.

0

Nếu bạn muốn chuyển đổi xâu thành kiểu dữ liệu tăng gấp đôi sau đó hầu hết chọn parseDouble() phương pháp. Xem mã ví dụ:

String str = "123.67"; 
double d = parseDouble(str); 

Bạn sẽ nhận được giá trị gấp đôi. Xem hướng dẫn về StringToDouble tại tutorialData.

+2

Và phương pháp valueOf() thì sao? – breceivemail

+0

Trả về đối tượng Double giữ giá trị kép được biểu diễn bằng chuỗi tham số s. – Rajshri

28

Double.parseDouble(String) sẽ trả lại loại nguyên thủy double. Double.valueOf(String) sẽ trả lại đối tượng bao bọc loại Double.

Vì vậy, cho ví dụ .:

double d = Double.parseDouble("1"); 

Double d = Double.valueOf("1"); 

Hơn nữa, valueOf(...) là một phương pháp quá tải.Nó có hai phiên bản:

  1. Double valueOf(String s)
  2. Double valueOf(double d)

Trong khi parseDouble là một phương pháp duy nhất với chữ ký sau đây:

  1. double parseDouble(String s)
1

T hey cả hai chuyển đổi một chuỗi thành một giá trị kép nhưng ở lại phương thức parseDouble() trả về giá trị double nguyên thủy, phương thức valueOf() tiếp tục chuyển đổi cặp nguyên thủy thành đối tượng lớp Double wrapper chứa giá trị kép nguyên thủy.

Việc chuyển đổi từ chuỗi thành số nguyên gốc có thể ném NFE (NumberFormatException) nếu giá trị trong chuỗi không chuyển đổi thành số nguyên gốc.

1

parseDouble() phương pháp được sử dụng để khởi tạo một STRING (mà nên chứa một số giá trị số) .... giá trị của nó là các kiểu dữ liệu cơ bản, như int, float vv

Nhưng valueOf () tạo một đối tượng của lớp Wrapper. Bạn phải mở nó ra để có được giá trị gấp đôi. Nó có thể được so sánh với một sô cô la. Các nhà sản xuất kết thúc tốt đẹp sô cô la với một số lá hoặc giấy để ngăn chặn ô nhiễm. Người dùng lấy sô cô la, loại bỏ và ném wrapper và ăn nó.

Quan sát chuyển đổi sau.

int k = 100; Integer it1 = new Integer(k);

Các kiểu dữ liệu int k được chuyển đổi thành một đối tượng, IT1 sử dụng lớp Integer. Đối tượng it1 có thể được sử dụng trong lập trình Java bất cứ nơi nào k được yêu cầu một đối tượng.

Đoạn mã sau có thể được sử dụng để unwrap (lấy lại int từ đối tượng Integer) đối tượng it1.

int m = it1.intValue(); 

System.out.println (m * m); // in 10000

// intValue() là một phương thức của lớp Integer trả về kiểu dữ liệu int.

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