2010-01-17 31 views
5

như chúng ta biết trong các biến java là chủ sở hữu bit với một loại được chỉ định. Và đối với các nguyên thủy, các bit đại diện cho một giá trị số.mẫu bit (giá trị biến) cho boolean trong java?

Ví dụ: một byte có giá trị 6 có mẫu bit 00000110.

vì vậy tôi muốn biết là boolean cũng là nguyên mẫu bit cho giá trị đúng và sai.

+0

Tôi tò mò về những gì bạn có thể sử dụng mà bạn hy vọng đưa ra câu trả lời. –

Trả lời

6

Nội bộ trong boolean bytecode/VM được biểu diễn dưới dạng byte với các mẫu bit 00000001 cho giá trị true và 00000000 cho sai. Nhưng thông tin đó không mua cho bạn bất cứ thứ gì như một nhà phát triển Java vì bạn chỉ đơn giản là không thể truy cập hoặc sử dụng số repoolantation của các boolean trong Java vì Java có chúng tách biệt hoàn toàn với các con số.

Chỉnh sửa: Tôi vừa tra cứu lại số Java VM Spec và phát hiện ra câu trả lời của mình sai. Trái ngược với những gì tôi đã nói trước đây, các boolean được lưu trữ như là CONSTANT_Integer structs trong mã byte mà làm cho chúng chiếm 4 byte cho dữ liệu trong nhóm không đổi, nhưng khi nhóm không đổi được thống nhất, có thể có tối đa 2 mục boolean trong bất kỳ lớp nào. Và vì tham chiếu đến hằng số không đổi luôn rộng 2 byte, một mảng các boolean sẽ chiếm 2 byte cho mỗi mục nhập trong mã byte.

3

Vâng, như skaffman nói: Đúng là 1 và sai là 0.

Nhưng điều đó không thực sự quan trọng, bởi vì trừ khi bạn nhìn vào dữ liệu tuần tự bên ngoài chương trình của bạn, bạn không bao giờ nhìn thấy những giá trị trong thế giới hoang dã.

Đối với những gì đáng giá, việc triển khai Java phổ biến thực sự lưu trữ các toán tử trong trường có kích thước nguyên, tức là chúng có giá trị đệm bằng khoảng không của thông tin đó. Truy cập 32 bit tại một thời điểm nhanh hơn một chút so với lấy một byte từ trong số 4 bit, và nhanh hơn nhiều so với việc đào một bit ra khỏi một byte. Tuy nhiên, tối ưu hóa này làm cho các mảng booleans khó chịu lớn. Nếu bạn có nhiều, nhiều bit để giải quyết và cần phải cắt giảm không gian, bạn nên sử dụng BitSet.

2

Nếu tôi không sai JVM đặc điểm kỹ thuật không ủy quyền như thế nào các giá trị boolean phải được đại diện nội bộ. Cách giá trị được biểu diễn bên trong là nhà cung cấp cụ thể và không quan trọng đối với lập trình viên vì chi tiết này hoàn toàn minh bạch đối với các chương trình chạy trên JVM.

+0

Có thể bạn đã đúng. Nhưng điều gì sẽ xảy ra khi việc tuần tự hóa và giao tiếp giữa các JVM có hiệu lực? Bất kể các giá trị được biểu diễn bên trong như thế nào, phải có một tiêu chuẩn ràng buộc để cho phép các JVM khác nhau nhận ra các giá trị boolean (và khác) của nhau, đúng không? –

+0

thats một điểm thú vị Carl. có phải có một số tiêu chuẩn ràng buộc như bạn nói ... nhưng tôi sợ tôi không thể bình luận về điều đó .. Tôi không biết – Aadith

+0

Không, nó không phải là nhà cung cấp cụ thể - sai là 0, đúng là 1. Ví dụ: biên dịch lớp này, dịch ngược nó với javap -p -c: class Kiểm tra {boolean t() {return true;} boolean f() {return false;}} –

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