Câu trả lời được gắn với các triển khai cụ thể của ngôn ngữ (các thư viện trình biên dịch và thời gian chạy). Ngay cả với sự hiện diện của các tùy chọn tối ưu hóa cụ thể hay không. Và, tất nhiên, phiên bản của việc thực hiện (và, ngầm nhiên, JLS nó phù hợp với). Vì vậy, nó tốt hơn để nói về minima và maxima. Trong thực tế, bài tập này cung cấp cho một tốt hơn
Đối với Ex1, số đối tượng tối thiểu là 1 (trình biên dịch nhận ra rằng chỉ có các hằng số liên quan và chỉ tạo mã cho String s= "abc" ;
). Tối đa có thể chỉ là bất cứ điều gì, tùy thuộc vào việc thực hiện, nhưng ước tính hợp lý là 8 (cũng được đưa ra trong một câu trả lời khác như số được tạo ra bởi cấu hình nhất định).
Đối với Ex2, số đối tượng tối thiểu là 2. Trình biên dịch không có cách nào để biết nếu chúng ta đã thay thế StringBuilder bằng phiên bản tùy chỉnh với ngữ nghĩa khác nhau, vì vậy nó sẽ không tối ưu hóa. Tối đa có thể là khoảng 6, đối với việc triển khai StringBuilder bảo toàn bộ nhớ cực kỳ mở rộng một sự ủng hộ char[]
mảng một ký tự cùng một lúc, nhưng trong hầu hết các trường hợp, nó cũng sẽ là 2.
Nguồn
2013-08-19 02:33:42
Ví dụ đầu tiên sẽ tạo 1 đối tượng khi trình biên dịch có thể tối ưu hóa nó. –
javac sẽ tối ưu hóa điều đó? –
Ví dụ 1 tạo ra điều này: 'String s =" a "; s = (StringBuilder mới (String.valueOf (s))). Chắp thêm ("b"). ToString(); s = (StringBuilder mới (String.valueOf (s))). Chắp thêm ("c"). ToString(); System.err.println (s); '. Có vẻ như javac không tối ưu hóa (ít nhất là trong Java 6) –