Hãy xem xét đoạn mã sau Java:Trình biên dịch Java có tối ưu hóa String.length() trong điều kiện của vòng lặp không?
String buffer = "...";
for (int i = 0; i < buffer.length(); i++)
{
System.out.println(buffer.charAt(i));
}
Kể từ String
là bất biến và buffer
không được bố trí bên trong vòng lặp, trình biên dịch Java sẽ đủ thông minh để tối ưu hóa đi các cuộc gọi buffer.length()
trong cho điều kiện vòng lặp không? Ví dụ, nó sẽ phát ra mã byte tương đương với mã sau đây, trong đó buffer.length()
được gán cho một biến, và biến đó được sử dụng trong điều kiện vòng lặp? Tôi đã đọc rằng một số ngôn ngữ như C# làm loại tối ưu hóa này.
String buffer = "...";
int length = buffer.length();
for (int i = 0; i < length; i++)
{
System.out.println(buffer.charAt(i));
}
Điều gì về các chuỗi dài thực sự, giả sử một vài 1000K? – Drejc
"jitter" là gì? – stackoverflowuser2010
Đó là chi phí 'O (1)', vì vậy nó không quan trọng.Chuỗi được lưu trữ dưới dạng '{length = 1000, dữ liệu ký tự = {0x65, ... 0x65}}'. – Mitch