Tại sao Java không có kiểu nguyên thủy cho Chuỗi khi hầu hết các loại dữ liệu khác làm?Tại sao không có loại nguyên thủy cho Chuỗi?
Trả lời
Chuỗi là một đối tượng, nó không phải là một kiểu nguyên thủy chút nào, chỉ là một mảng ký tự. Lý do tại sao loại nguyên thủy tồn tại trong Java ở tất cả là một trong những thú vị, đoạn trích từ a James Gosling interview:
Bill Venners: Tại sao có nguyên thủy loại trong Java? Tại sao không phải mọi thứ chỉ là một đối tượng?
James Gosling: Hoàn toàn hiệu quả điều. Có tất cả các loại người , những người đã xây dựng các hệ thống trong đó ints và là tất cả các đối tượng. Có nhiều cách để thực hiện điều đó và tất cả các số chúng đều có một số vấn đề nghiêm trọng về vấn đề . Một số chỉ chậm, vì chúng phân bổ bộ nhớ cho mọi thứ. Một số người trong số họ cố gắng làm các đối tượng , đôi khi chúng không phải là (mà là hệ thống LISP tiêu chuẩn đã làm), và sau đó mọi thứ trở nên thực sự kỳ lạ. Nó loại tác phẩm, nhưng thật kỳ lạ.
Chỉ cần làm cho nó như vậy mà có nguyên thủy và các đối tượng, và chúng chỉ khác nhau. Bạn giải quyết rất nhiều vấn đề.
Vì vậy, trong ngắn hạn các loại nguyên thủy tồn tại vì lý do hiệu quả.
+1 - Và hệ quả là chuỗi không phải là nguyên thủy bởi vì nó làm cho nó một nguyên thủy sẽ không làm cho nó hiệu quả hơn. –
Một lý do rất tốt để có các loại nguyên thủy thực sự! Nó chắc chắn tiết kiệm thời gian để chỉ cần thực hiện một int hơn đi lãng phí giây quý giá (khoảng 10) làm cho một ví dụ 'Integer foo = new Integer (aValueFoo);'. Tôi có thể lộn xộn để xem 'Integer foo Integer foo Integer foo Integer foo ...' lót mã của bạn theo ý kiến của tôi. Integer có sử dụng của nó khi nói đến những điều lớn hơn để làm với số nguyên ... nguyên thủy là một phước lành! –
Hầu hết các ngôn ngữ lập trình không coi chuỗi nguyên thủy vì nó thực sự là một mảng ký tự. Các kiểu nguyên thủy hầu như luôn có kích thước cố định.
Tôi nên nói rằng mặc dù một số người có thể coi Chuỗi là "nguyên thủy" bởi vì nó được tích hợp sẵn. Nhưng nó không phải nguyên thủy theo nghĩa là một kiểu cơ bản trái ngược với một loại hỗn hợp. Bởi vì một chuỗi là một mảng các ký tự, nó là một loại hỗn hợp.
Có ngôn ngữ nào coi nó là nguyên thủy không? Một chiều dài cố định trong bộ nhớ có phải là một bộ nhớ không? – Jeff
Kỳ lạ là đủ, trong chuỗi Javascript là nguyên thủy. Nó có thể có độ dài bộ nhớ cố định vì nó không thay đổi được. –
int, char, float, double, v.v. tất cả đều có độ dài cố định trong bộ nhớ. ví dụ. một int có 4 byte, do đó 32 bit.
nhưng một chuỗi có thể có độ dài khác nhau, nó thực sự là một mảng char.
Vâng, đó là một lý do để nói tại sao nó phải là một loại đối tượng (tức là một lớp) và không phải là một loại giá trị (tức là một cấu trúc) - câu hỏi là, tại sao nó không phải là nguyên thủy? - Trong Java là tất cả các kiểu giá trị nguyên thủy? - Không có cấu trúc nào trong Java? – BrainSlugs83
Câu trả lời hợp lý CHỈ được tìm thấy cho một câu hỏi thẳng: Vì các vấn đề phân bổ bộ nhớ. một kiểu int hoặc float đòi hỏi một kích thước bộ nhớ cụ thể, nhưng một chuỗi (xin lỗi, String) có độ dài thay đổi được tạo thành từ một thời gian không xác định (tại thời điểm khai báo) của bộ nhớ. Giai đoạn. Cảm ơn bạn rất nhiều! – user3285866
- 1. Chuỗi có phải là kiểu nguyên thủy không?
- 2. Số nguyên là kiểu nguyên thủy
- 3. Tại sao các loại nguyên thủy như Int bị xóa đối tượng trong Scala?
- 4. Tại sao không có vòng tròn hoặc hình elip nguyên thủy trong OpenGL?
- 5. Loại Biến tần bị hỏng cho các kiểu nguyên thủy?
- 6. Dễ bay hơi hoặc đồng bộ cho loại nguyên thủy?
- 7. Chi phí cho đúc loại nguyên thủy trong Java
- 8. Sử dụng các loại nguyên thủy Unsigned
- 9. Java Iterator với nhiều loại nguyên thủy
- 10. ToString có được gọi cho các kiểu nguyên thủy không?
- 11. Kiểm tra xem loại biến có phải là nguyên thủy
- 12. Tại sao kích thước nguyên thủy boolean của Java không được xác định?
- 13. Tại sao không tồn tại một nguyên thủy `call-with-current-continuations` trong Common Lisp?
- 14. Luôn sử dụng trình bao bọc đối tượng nguyên thủy cho JPA @Id thay vì loại nguyên thủy?
- 15. Tại sao JavaScript nguyên thủy không phải là đối tượng của đối tượng?
- 16. Java nguyên thủy có bất biến không?
- 17. Tại sao không có một nguyên gốc Lisp 'unquote`?
- 18. Di chuyển ngữ nghĩa và các loại nguyên thủy
- 19. Các loại nguyên thủy và các thùng chứa IoC
- 20. ClassTag dựa khớp mẫu không cho nguyên thủy
- 21. Tại sao trình biên dịch Java không giống như int nguyên thủy như kiểu cho các giá trị trong HashMap?
- 22. Thay thế nguyên thủy cho Bàn ổi
- 23. Java: Sao chép mảng của kiểu không nguyên thủy
- 24. Mục tiêu-C setValue: forKey trên c loại nguyên thủy
- 25. Tại sao Java Generics không hỗ trợ các kiểu nguyên thủy?
- 26. nguyên thủy-boolean Để ghép nối chuỗi/chuyển đổi
- 27. Tại sao không có typeclass cho các loại container?
- 28. Android: Không thể gọi toString() trên kiểu nguyên thủy int
- 29. Loại biến số nguyên thủy trong thời gian biên dịch
- 30. Tại sao gọi một số chức năng của lớp Object, trên một thể loại nguyên thủy, cần boxing?
Ugh. Tôi muốn không có nguyên thủy ở tất cả phải trung thực với bạn. – CookieOfFortune
Về cơ bản cùng một câu hỏi mà bạn đã hỏi ở đây: http://stackoverflow.com/questions/2099171/integer-as-primitve-type – David
Bạn có thực sự muốn nói, tại sao không có đối tượng "loại giá trị" cho chuỗi thay vì loại nguyên thủy ? (tức là làm thế nào để bạn đặt một chuỗi trên ngăn xếp so với đống?) – BrainSlugs83