Tại sao một ký tự trong Java mất gấp đôi không gian để lưu trữ dưới dạng ký tự trong C?Kích thước ký tự trong Java so với C
Trả lời
Trong các ký tự Java là 16-bit và C, chúng là 8 bit.
Câu hỏi tổng quát hơn là tại sao lại như vậy?
Để tìm hiểu lý do bạn cần xem lịch sử và đi đến kết luận/ý kiến về chủ đề này.
Khi C được phát triển ở Mỹ, ASCII khá chuẩn và bạn chỉ thực sự cần 7 bit, nhưng với 8 bạn cũng có thể xử lý một số ký tự không phải ASCII. Nó có vẻ là quá đủ. Nhiều giao thức dựa trên văn bản như SMTP (email), XML và FIX, vẫn chỉ sử dụng ký tự ASCII. Email và XML mã hóa các ký tự không phải ASCII. Các tệp nhị phân, ổ cắm và luồng vẫn chỉ có 8 bit byte gốc.
BTW: C có thể hỗ trợ nhân vật rộng hơn, nhưng đó không phải là đơn giản char
Khi Java được phát triển 16-bit có vẻ như đủ để hỗ trợ hầu hết ngôn ngữ. Kể từ đó unicode đã được mở rộng đến các ký tự trên 65535 và Java đã phải thêm hỗ trợ cho codepoints là ký tự UTF-16 và có thể là một hoặc hai ký tự 16 bit.
Vì vậy, hãy tạo byte
một byte và char
giá trị 16 bit chưa ký có ý nghĩa tại thời điểm đó.
BTW: Nếu JVM của bạn hỗ trợ -XX:+UseCompressedStrings
, nó có thể sử dụng byte thay vì ký tự cho chuỗi chỉ sử dụng ký tự 8 bit.
Bây giờ thì giống như vậy :) +1 –
Xem thêm @
Để chính xác, trong C chúng * ít nhất * 8 bit. –
Java char là một mã mã UTF-16 mã hóa unicode trong khi C sử dụng mã hóa ascii trong hầu hết các trường hợp.
Tiêu chuẩn C không ủy nhiệm ASCII. –
Ngoài ra, char Java không phải là "char unicode". –
Phải, đó là đơn vị mã UTF-16. –
Vì Java sử dụng Unicode, C thường sử dụng ASCII theo mặc định.
Có nhiều hương vị mã hóa Unicode, nhưng Java sử dụng UTF-16, sử dụng một hoặc hai đơn vị mã 16 bit cho mỗi ký tự. ASCII luôn sử dụng một byte cho mỗi ký tự.
UTF-16 không "sử dụng hai byte cho mỗi char". –
Xin lỗi, "ít nhất" hai byte cho mỗi ký tự. – DNA
Nền tảng Java 2 sử dụng UTF-16 đại diện trong mảng char và trong String và StringBuffer lớp.
Java là một ngôn ngữ hiện đại để nó hỗ trợ Unicode theo mặc định, giống như nhiều ngôn ngữ mới hôm nay (chẳng hạn như C#). Ngược lại C là một ngôn ngữ "cổ đại" từ thời đại của ASCII 7-bit, do đó nó sử dụng char 8 bit theo mặc định.Khi đến với thời gian Unicode, để không thực hiện ngắt mã cũ, họ quyết định sử dụng một loại ký tự khác là wchar_t
- 1. Java: Char so với kích thước byte chuỗi.
- 2. Chuỗi ký tự so với const char * trong C
- 3. Hãy thử so sánh các ký tự trong C#
- 4. C++ so sánh hai chuỗi ký tự
- 5. C - So sánh hai ký tự
- 6. Kích thước Java ImageIcon
- 7. thay đổi kích thước ký tự bằng CSS
- 8. Java InputStream kích thước
- 9. Ký tự đại diện so với phương pháp chung
- 10. Mã hóa ký tự và chuỗi ký tự trong C++
- 11. File trong kích thước bộ nhớ trong Java
- 12. C++ mảng kích thước cố định so với nhiều đối tượng cùng loại
- 13. Chuỗi ký tự và ký tự trong Java
- 14. Thẻ HTML5 so với Div để tự động thay đổi kích thước
- 15. Cách lấy các ký tự cuối cùng trong một chuỗi trong Java, bất kể kích thước chuỗi
- 16. Nhận kích thước tệp lớn trong C
- 17. Lấy kích thước màn hình trong Java
- 18. Kích thước khóa AES trong Java
- 19. wxpython: tự động thay đổi kích thước ảnh tĩnh (staticbitmap) để vừa với kích thước
- 20. Tự động thay đổi kích thước phần tử với kích thước cửa sổ jquery
- 21. Cách so sánh chuỗi với mẫu ký tự đại diện trong C#
- 22. So sánh ký tự unicode mục tiêu C
- 23. kích thước của kiểu char trong C
- 24. Nhà xây dựng trong Java so với C++?
- 25. C++ Kích thước của mảng
- 26. Tạo một mảng byte với kích thước động trong F #
- 27. Kích thước của wchar_t * cho cặp thay thế (Unicode ký tự trong BMP) trên Windows
- 28. ggplot2: Điều chỉnh kích thước ký hiệu trong chú thích
- 29. Kích thước tự động ElementHost với nội dung của nó
- 30. C/C++ nhận được kích thước struct
Người ta có thể phản đối hỏi câu hỏi, làm sao bạn biết đủ rằng chúng khác nhau nhưng không đi đến bước tiếp theo và tìm ra lý do tại sao? –
Java mạnh gấp đôi C++, và sức mạnh phải đến từ đâu đó ... –
@KerrekSB Nhưng nó có thể có 256 x nhiều ký tự. ;) –