Я пытаюсь понять компиляцию и вычисление времени выполнения в java. У меня есть следующие перечисленияjava компиляция по сравнению с вычислением времени выполнения
public enum SightSensor{
NORTH (new MapLocation[]{new MapLocation(0,1),
new MapLocation(0,2),
new MapLocation(0,3)}),
SOUTH (new MapLocation[]{new MapLocation(0,-1),
new MapLocation(0,-2),
new MapLocation(0,-3)});
private final MapLocation[] locs;
SightSensor(MapLocation[] locs){
this.locs = locs;
}
public static MapLocation[] getLocs(Direction dir){
if (dir == Direction.NORTH)
return NORTH.locs;
if (dir == Direction.SOUTH)
return SOUTH.locs;
}
};
В словах, я хочу определить постоянное отображение между направлением и массивом MapLocations. (Возможно, это неправильный способ сделать это? Я новичок в Java.) Теперь, если я написать
MapLocation[] locs = SightSensor.getLocs(Direction.SOUTH_WEST);
внутри цикла в коде, я считаю, что есть стоимость накладных расходов в первый раз вызывается код , подразумевающий, что он каким-то образом вычисляется/создается в процессе выполнения. Если вместо я только непосредственно код
MapLocation[] locs = new MapLocation[]{new MapLocation(0,1),
new MapLocation(0,2),
new MapLocation(0,3)};
нет накладных расходов. Я не понимаю разницы. Составляет ли компилятор странный вид вычисления «точно в срок»?
Можете ли вы объяснить, как вы измеряете накладные расходы? –
Кроме того, ваш пример не компилируется; вам нужно какое-то другое выражение в 'getLocs', потому что теперь есть пути без возвращаемого значения (когда' dir' не является ни NORTH, ни SOUTH) –
Nail, извините за это, попытался упростить код. Измерение в байтекоде. – andyInCambridge