У меня быстрый вопрос о том, насколько «умным» является компилятор Java, представленный в JDK от Sun.В частности, достаточно ли умен, чтобы оценивать какие-либо функции, появляющиеся в условной части цикла for (), заблаговременно, вместо того, чтобы оценивать их на каждой итерации цикла?
Например, рассмотрим следующий код.
// Array of doubles to "hold" the array.
private double matrix[][];
public int getCols() {
// Compute the number of columns in a matrix.
}
public int getRows() {
// Compute the number of rows in a matrix.
}
// Compute the sum of all elements in the matrix.
public double sum() {
double result = 0;
for (int r = 0; r < getRows(); r++) {
for (int c = 0; c < getCols(); c++) {
result += this.matrix[r][c];
}
}
return result;
}
Ясно, что я мог бы изменить метод sum () на обеспечить , чтобы getRows () и getCols () не оценивались на каждой итерации цикла, изменив его на
public double sum() {
double result = 0;
int numRows = getRows();
int numCols = getCols();
for (int r = 0; r < numRows; r++) {
for (int c = 0; c < numCols; c++) {
result += this.matrix[r][c];
}
}
return result;
}
Интересно, однако, достаточно ли умен компилятор, чтобы предварительно оценить их сам.То есть будет ли он автоматически определять, что вычислительно дешевле оценивать любые функции, появляющиеся в условных выражениях раньше, чем оценивать их на каждой итерации?
Спасибо!