2012-10-29 31 views
8

Vì vậy, nếu tôi cóChủ đề char [] cuối cùng có an toàn không?

private static final char[] SOME_CHARS; 

Chủ đề đó có an toàn không? Bởi vì tôi có nghĩa là nếu tôi có nhiều chủ đề đề cập đến các ký tự trong mảng đó (nhưng không thay đổi chúng), sẽ bất cứ điều gì đi sai?

ví dụ:

private class someThread extends Thread(){ 


    public void run(){ 
    for(int i = 0; i < someIndexInSomeChars;i++){ 
     System.out.println(SOME_CHARS[i]); 
    } 
} 

Nói cách khác, tôi có cần đặt char [] vào một số loại bộ sưu tập Java có hỗ trợ luồng không?

+1

Không có vấn đề gì ở đó. 'Chuỗi' mặc dù, là một kiểu dữ liệu không thay đổi được đảm bảo, do đó an toàn hơn. Ngay cả khi thay đổi một char sẽ là tốt. –

+0

Tôi đã điều chỉnh tiêu đề được đóng thành mã - 'char []' thay vì 'Char []'. Tôi cho rằng đó là những gì bạn thực sự có ý nghĩa? –

+0

yes- xin lỗi đó là lỗi đánh máy - Tôi sẽ thêm cuối cùng vào tiêu đề quá – praks5432

Trả lời

10

Nếu bạn không thay đổi chúng sau khi khởi tạo, nó sẽ ổn. (Lưu ý rằng điều này dựa vào nó là biến số static final - cách các lớp được khởi tạo sẽ đảm bảo rằng tất cả các chuỗi đều xem chính xác tham chiếu mảng được khởi tạo.)

Mảng an toàn để đọc từ nhiều luồng. Bạn thậm chí có thể viết từ nhiều chủ đề nếu bạn không nhớ nhìn thấy kết quả cũ - bạn sẽ không kết thúc "hỏng" bộ sưu tập chính nó. (Không giống như nhiều bộ sưu tập khác, bạn không thể thay đổi kích thước của một mảng ... không có trạng thái nào để sửa đổi khác với chính các phần tử đó.)

+0

hmm nếu tôi lấy char và đặt nó vào một String thì sao? Vì vậy, String = "someStuff" + SOME_CHARS [i] "; và sau đó trả về String tại một số điểm? Tôi không coi đây là một vấn đề vì String mới nên có một char mới như trái ngược với một tham chiếu đến char cũ - Đó là trường hợp? – praks5432

+0

@ praks5432: Không sao đâu, không rõ ý bạn là "char mới" và "char cũ" ở đây ... đừng quên rằng 'char' là kiểu nguyên thủy ... –

+0

hmm, do đó, tôi đoán tôi đang hỏi điều này- nếu tôi làm những việc khác nhau với cùng một char mà tôi nhận được từ cùng một chỉ mục trong mảng đó, sau đó tôi đảm bảo rằng mảng sẽ không thay đổi? – praks5432

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