2011-09-14 10 views

Trả lời

18

. Tất cả các bài tập tham chiếu đều là nguyên tử trong java.

Chỉ cần lưu ý rằng một câu lệnh tổng hợp như String s = new String("foobar") không phải là nguyên tử, bởi vì nó bao gồm tạo đối tượng và sau đó gán một cách riêng biệt.

Cũng lưu ý rằng "bài tập để biến dài và đôi có thể không nguyên tử", từ JLS-17.7

+3

Nó cũng cần lưu ý rằng bài tập cho 'long' và 'double' biến là * không * nguyên tử: xem [JLS chương 17,7 ] (http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7) để biết thêm thông tin. – Bombe

+0

Để nhấn mạnh câu cuối cùng của bạn: Khi tôi hiểu JLS, hành vi sau đây là tốt: 1. Phân bổ không gian cho 'chuỗi mới'. 2. gán đối tượng uninitialized cho s. 3. chạy constructor. – Voo

+0

@Bombe, cảm ơn tôi đã bỏ lỡ điều đó, đã cập nhật câu trả lời –

1

Vâng, nhưng nếu bạn đang lo lắng về điều kiện chủng tộc, ít nhất bạn nên lưu ý các phương pháp 'đồng bộ'/khối.

Và lưu ý rằng đây không phải là nguyên tử vì nó có chứa hai hoạt động:

String s = string_a + string_b; 
+0

Tôi chỉ thấy một hoạt động, hai hoạt động là gì? –

+0

@JanusTroelsen Các hoạt động tôi thấy là: 1. 'StringBuilder' instanciation; 2. 'sb.append (string_a)'; 3. 'sb.append (string_b)'; 4. 'sb.toString()'; 5. gán cho 's' – rds

+0

@rds: Cảm ơn, tôi không biết + đã biên dịch –