2013-06-05 23 views
7

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

+3

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

+3

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. –

+1

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' ... –

Trả lời

8

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]

+2

+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). –

1

Đó 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)

1

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 đó.

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