Tôi đọc trong đặc tả JVM rằng các kiểu dữ liệu byte, ngắn và char được xử lý nội bộ dưới dạng int. Vậy tại sao có các loại dữ liệu này nếu chúng ta không có lợi ích từ kích thước nhỏ?tại sao các kiểu dữ liệu byte, char và ngắn cần
Trả lời
Trong phần nó để tương thích với C/C++, và một phần nó để tiết kiệm bộ nhớ - trong nội bộ, một đoạn ngắn là lưu trữ như một đoạn ngắn, nhưng nó xử lý là một số nguyên. A new short[10]
chiếm một nửa bộ nhớ nhiều như một new int[10]
+1: mảng, chủ yếu. Trên stack hoặc trong một biến cục bộ, một 'byte' chiếm nhiều chỗ như một' int' (các trường mà JVM có thể tối ưu hóa, nếu nó muốn). –
Đó là do sự cố của bộ nhớ. Mỗi biến có một không gian bộ nhớ. Kích thước của không gian phụ thuộc vào loại biến mà bạn sử dụng.
Nếu không, kiểu char rất hữu ích khi bạn thao tác chuỗi. Thật vậy, bạn có thể có một ký tự của chuỗi bằng cách sử dụng string.charAt (index)
Câu trả lời được đưa ra rất tốt, nhưng tôi sẽ chỉ ra một cách sử dụng khác. Bạn có thể làm một số thời gian biên dịch kiểm tra các kiểu dữ liệu. Ví dụ, bạn có thể có tuổi (tính bằng năm) của một người dưới dạng byte và bạn có thể thực hiện kiểm tra thời gian biên dịch để đảm bảo rằng giá trị lớn hơn được lưu trữ trong một int hoặc ngắn được sử dụng cho trường đó.
- 1. Java HashSet và kiểu dữ liệu Ngắn, không tương thích?
- 2. java kiểu dữ liệu byte
- 3. Sự khác nhau giữa BYTE và CHAR trong kiểu dữ liệu cột
- 4. 1 byte dữ liệu kiểu số nguyên
- 5. Serialize kiểu char dữ liệu với XmlSerializer
- 6. Các kiểu dữ liệu PostgreSQL và C#
- 7. Chuyển đổi kiểu dữ liệu 'dài' để byte mảng
- 8. Chuyển đổi mảng byte (mảng char) thành kiểu số nguyên (ngắn, int, dài)
- 9. Tại sao Scala xác định toán tử "+ =" cho các loại Ngắn và Byte?
- 10. varchar2 (n BYTE | CHAR) mặc định -> CHAR hoặc BYTE
- 11. Tại sao không có byte hoặc các chữ ngắn trong Java?
- 12. Char thành byte? (Java)
- 13. Sử dụng byte làm kiểu dữ liệu khóa chính
- 14. Vì IPV6 cần 128 bit (16 byte) thì tại sao dữ liệu CIDR postgres có dung lượng lưu trữ là 24 byte (8.1) và 19byte (9.1)?
- 15. tại sao các trường bit cho cùng một kiểu dữ liệu có kích thước nhỏ hơn so với trường bit cho kiểu dữ liệu hỗn hợp
- 16. Tại sao nguyên gốc Java char chiếm 2 byte bộ nhớ?
- 17. Byte và chuyển đổi char trong Java
- 18. Tại sao các chương trình kiểu nhanh thất bại ngắn hơn các chương trình kiểu phòng thủ?
- 19. const char * kiểu char *
- 20. Tại sao kết quả của unsigned char << unsigned char không phải là unsigned char
- 21. Kiểm tra kiểu UTF-8 dữ liệu 3-byte, hoặc 4-byte Unicode
- 22. Tại sao kích thước của kiểu dữ liệu bool chỉ bằng 1 bit trong C#?
- 23. Từ [] byte sang char *
- 24. Cách lấy kiểu dữ liệu char từ mysql bằng cách sử dụng resultset
- 25. Tại sao chú thích kiểu này trong Haskell cần thiết?
- 26. Sao chép n byte dữ liệu x thành tệp
- 27. Ẩn các hàm tạo kiểu dữ liệu
- 28. Chuyển mảng char thành mảng byte và ngược lại
- 29. Tại sao chúng ta cần cột kiểm tra trong bảng cơ sở dữ liệu?
- 30. Kiểu dữ liệu C# so với kiểu dữ liệu MySql
Chủ yếu cho mảng. Một loạt các quần short vẫn sử dụng một nửa bộ nhớ nhiều như một mảng các số nguyên có cùng kích thước. – MTilsted
Tôi chắc chắn có rất nhiều thuật toán tùy thuộc vào phạm vi giá trị của các loại tích phân khác nhau, ví dụ: mong đợi giá trị tích phân tràn vào điểm nhất định. –
Ngoài các vấn đề bộ nhớ, các kiểu số cơ bản này thường có ích khi xử lý các giao thức truyền thông hoặc mã tương tác với các cấu trúc nhỏ gọn được định nghĩa bên ngoài mã Java. Tất nhiên, nếu các nhà thiết kế ngôn ngữ thực sự quan tâm đến trường hợp sử dụng này, họ sẽ thêm các loại chưa ký vào ngôn ngữ để chúng ta không cần các thủ thuật khủng khiếp như 'b & 0xFF' ... –