Là String s = "foobar";
nguyên tử?Chuỗi là s = "foobar" nguyên tử?
Chỉ định tham chiếu đối tượng nên, nhưng tôi không thực sự chắc chắn.
Cảm ơn.
Là String s = "foobar";
nguyên tử?Chuỗi là s = "foobar" nguyên tử?
Chỉ định tham chiếu đối tượng nên, nhưng tôi không thực sự chắc chắn.
Cảm ơn.
Có. 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
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;
Tôi chỉ thấy một hoạt động, hai hoạt động là gì? –
@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
@rds: Cảm ơn, tôi không biết + đã biên dịch –
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
Để 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
@Bombe, cảm ơn tôi đã bỏ lỡ điều đó, đã cập nhật câu trả lời –