Мне любопытно.Если я создаю несколько локальных переменных, которые используются просто как псевдонимы для других переменных (то есть новой переменной «псевдоним» просто присваивается значение какой-либо другой переменной, и назначение псевдонима никогда не меняется), оптимизирует ли JVM это с помощьюнапрямую использовать исходные переменные?
Скажем, например, что я пишу (неизменяемый) класс кватернионов ( кватернион - это вектор с четырьмя значениями).Я пишу multiply()
метод, который принимает другой Quaternion
, умножает два и возвращает полученный Quaternion
.Чтобы сэкономить на наборе текста и повысить удобочитаемость, я делаю несколько псевдонимов перед выполнением фактических вычислений:
public class Quaternion {
private double[] qValues;
public Quaternion(double q0, double q1, double q2, double q3) {
qValues = new double[] {q0, q1, q2, q3};
}
// ...snip...
public Quaternion multiply(Quaternion other) {
double a1 = qValues[0],
b1 = qValues[1],
c1 = qValues[2],
d1 = qValues[3],
a2 = other.qValues[0],
b2 = other.qValues[1],
c2 = other.qValues[2],
d2 = other.qValues[3];
return new Quaternion(
a1*a2 - b1*b2 - c1*c2 - d1*d2,
a1*b2 + b1*a2 + c1*d2 - d1*c2,
a1*c2 - b1*d2 + c1*a2 + d1*b2,
a1*d2 + b1*c2 - c1*b2 + d1*a2
);
}
}
Так что в этом случае JVM обойдется без a1
, b1
и т. Д.просто используйте qValues[n]
и other.qValues[n]
напрямую?