2015-09-16 19 views
12

Trong lớp Java của tôi chúng ta vừa học được về của mỗi kiểu dữ liệu nguyên thủy như sau:Tại sao không sử dụng từ lâu cho tất cả các số nguyên giá trị

  • byte
  • short
  • int
  • long

Vì loại dữ liệu long chứa s nhiều nhất, nó sẽ không có ý nghĩa để sử dụng độc quyền các loại dữ liệu long để tránh hạn chế?

Câu hỏi

  • Có một sự sụp đổ đặc biệt với chỉ sử dụng các loại long dữ liệu?
  • Chẳng hạn, sử dụng loại dữ liệu int, thay vì loại dữ liệu long?
+1

Tốc độ, hiệu quả và RAM/không gian đĩa được sử dụng để ở mức phí bảo hiểm vì vậy chúng tôi đã từng lo lắng về những điều này. Những ngày này trên máy chủ và máy tính để bàn tôi thấy ít điểm trong đó. Nó có lẽ vẫn còn quan trọng trong các ứng dụng di động. –

+0

Đó là khá mát mẻ, để biết rằng trong quá khứ, các loại dữ liệu đã được "đáng kể". Không thể nói rằng bây giờ một loại dữ liệu ngày không đáng kể, tuy nhiên tôi có thể hiểu tại sao nó lại là một vấn đề trong quá khứ. –

+0

@PaulTomblin Vẫn khá dễ dàng để hết bộ nhớ bằng cách sử dụng cấu trúc dữ liệu nguyên thủy lớn hơn cần thiết cho một số loại ứng dụng (thừa nhận rằng tôi đã gặp phải vấn đề này trong việc giải quyết các vấn đề ví dụ, nhưng tôi có thể thấy rằng trải nghiệm thực tế với điều này). Ngoài ra, chỉ vì một ứng dụng sẽ không sử dụng hết tất cả/hầu hết bộ nhớ không có nghĩa là một máy tính chạy nhiều ứng dụng sẽ không - tôi, cho một ứng dụng, đánh giá cao một dấu chân bộ nhớ nhỏ. Và nếu bạn đang nói về dữ liệu lớn, sự khác biệt giữa 'long' và' int' có thể có giá trị tiền tệ không tầm thường gắn liền với nó. – Dukeling

Trả lời

6

Liệu nó có ý nghĩa để sử dụng cho ví dụ, một loại int dữ liệu, thay vì một loại long dữ liệu?

TUYỆT ĐỐI CÓ.


MEMORY/Disk Usage

Chỉ sử dụng một biến hoặc hai bạn sẽ không thấy sự khác biệt về hiệu suất, nhưng khi ứng dụng phát triển nó sẽ tăng tốc độ ứng dụng của bạn.

Kiểm tra this question for further info.

Cũng tìm cách để Oracle primitive type documentation bạn có thể thấy một số lời khuyên và sử dụng bộ nhớ:

type memory usage recommended for 
------- --------------- --------------------------------------------------- 
byte 8-bit signed The byte data type can be useful for saving memory in large arrays, where the memory savings actually matters. 
short 16-bit signed same as byte 
int  32-bit signed 
long 64-bit   Use this data type when you need a range of values wider than those provided by int 
float     Use a float (instead of double) if you need to save memory in large arrays of floating point numbers. This data type should never be used for precise values, such as currency. 

byte:

Byte kiểu dữ liệu là một 8-bit đã ký hai của bổ sung số nguyên. Nó có giá trị tối thiểu là -128 và giá trị tối đa là 127 (bao gồm). Loại dữ liệu byte có thể hữu ích để lưu bộ nhớ trong mảng lớn, nơi tiết kiệm bộ nhớ thực sự quan trọng.

short:

Các kiểu dữ liệu ngắn gọn là một 16-bit đã ký hai của bổ sung số nguyên. Nó có giá trị tối thiểu là -32,768 và giá trị tối đa là 32.767 (bao gồm). Như với byte, các nguyên tắc tương tự áp dụng: bạn có thể sử dụng một đoạn ngắn để lưu bộ nhớ trong các mảng lớn, trong trường hợp tiết kiệm bộ nhớ thực sự quan trọng.

int:

Theo mặc định, kiểu int dữ liệu là một 32-bit đã ký hai của bổ sung số nguyên.

long:

Các kiểu dữ liệu dài là một 64-bit hai của bổ sung số nguyên. Thời hạn đã ký có giá trị tối thiểu là -263 và giá trị tối đa là 263-1. (...) Sử dụng loại dữ liệu này khi bạn cần một phạm vi giá trị rộng hơn các giá trị được cung cấp bởi int.

float:

Các kiểu dữ liệu float là một single-chính xác 32-bit IEEE 754 điểm nổi. Phạm vi giá trị của nó nằm ngoài phạm vi của cuộc thảo luận này, nhưng được xác định trong phần Các loại Nổi, Định dạng và Giá trị của Đặc tả Ngôn ngữ Java. Như với các khuyến nghị cho byte và ngắn, sử dụng một phao (thay vì gấp đôi) nếu bạn cần lưu bộ nhớ trong các mảng lớn các số dấu phẩy động. Loại dữ liệu này sẽ không bao giờ được sử dụng cho các giá trị chính xác, chẳng hạn như tiền tệ.


code dễ đọc

Ngoài ra, nó sẽ làm rõ tâm trí của bạn và mã của bạn, cho phép nói, bạn có một biến đại diện cho ID của một đối tượng, đối tượng ID này sẽ không bao giờ sử dụng số thập phân, như vậy, nếu bạn nhìn thấy trong mã của bạn:

int id; 

bạn sẽ ngay bây giờ cho chắc chắn cách ID này sẽ xem xét, nếu không

double id; 

không.

Ngoài ra, nếu bạn thấy:

int quantity; 
double price; 

bạn sẽ biết quantity sẽ không cho phép số thập phân (chỉ có đầy đủ các đối tượng) nhưng giá sẽ làm ... Điều đó làm cho công việc của bạn (và các lập trình viên khác sẽ đọc mã của bạn) dễ dàng hơn.

+0

Ahhhh, vậy lợi ích duy nhất là tăng hiệu quả/tốc độ? –

+0

Tại sao tốc độ/hiệu quả không đủ lợi ích? Sự tồn tại của các kiểu nguyên thủy trong một ngôn ngữ trung tâm đối tượng khác đã là một thước đo tốc độ/hiệu quả thuần túy. – Thilo

+0

Đừng quên dấu chân bộ nhớ. Đặc biệt là khi sử dụng các cấu trúc dữ liệu lớn như ma trận. –

1

Ngoài phạm vi (giá trị tối thiểu và tối đa có thể được lưu trữ trong bất kỳ loại dữ liệu cụ thể nào) có một khía cạnh khác và đó là size của biến.

Bạn phải nhận thức được sau quá:

byte = 1 byte 
short = 2 bytes 
int = 4 bytes 
long = 8 bytes 

Vì vậy, sử dụng long biến có nghĩa là bạn đang phân bổ 8 bytes bộ nhớ đến nó.

Cái gì đó như,

long var = 1000L

không hiển thị sử dụng hiệu quả bộ nhớ. Điều gì xảy ra nếu bạn nhận được GB RAM trong những ngày này không có nghĩa là chúng ta nên lãng phí nó.

Điểm đơn giản tôi muốn thực hiện là, sử dụng bộ nhớ hiệu quả hơn, nhanh hơn sẽ là ứng dụng.

+0

@JordiCastilla Tôi không hiểu điểm của bạn. Bạn có thể vui lòng xây dựng? – gprathour

+0

ồ không, lỗi của tôi ... byte sử dụng 7 bit để lưu trữ số và 1 để lưu trữ chữ ký ...chỉ từ 128 đến -127 ... bạn nói đúng !!! –

+0

Nhưng liệu bộ vi xử lý có phải lưu trữ từng byte trong một vùng bộ nhớ 64 bit riêng biệt không? Tôi nghĩ đó là cách intel cpus làm việc anyway. Nếu không, bạn phải làm bitwise hoặc hoạt động nếu bạn muốn chúng đóng gói chặt chẽ? – LegendLength

0

Hiệu suất trong bộ nhớ cần và tốc độ sẽ làm cho chi phí long đắt tiền.

Tuy nhiên, có một lợi thế khác là int: một cách dễ dàng kết hợp với int biểu thức con và có thể mất thông tin dài khi kết hợp hoạt động sai. Một sự thay đổi chút ít của 50 thực sự làm 18 và cứ thế. Chỉ sử dụng các số có mã bưu chính L sẽ là một biện pháp. Ngoài ra long có thể phục vụ như là một tràn tràn cho int phép nhân và các hoạt động khác như vậy, nơi để phát hiện lâu một tràn là tất cả những gì bạn có thể làm.

Lưu ý rằng đối với các hoạt động "int" tất cả "của byte và ngắn được truyền đến int.

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