Давайте представим, что есть некий метод, который принимает скажем 3 параметра.
public void something(final String id, final String name, final Entity entity){
//...
}
В данном случае все параметры помечены как final. Т.е. я точно знаю, что не буду их изменять, а только буду пользоваться их значениями. Какие + и - описанного выше. Стоит ли писать слово 'final' в параметрах метода? Имеет ли это какой-либо смысл в плане оптимизации?
Вот такой класс
public class Final {
private final String second;
private String first;
public Final(String first, final String second) {
this.first = first;
this.second = second;
}
}
Компилируется в вот такой байткод
// class version 52.0 (52)
// access flags 0x21
public class Final {
// compiled from: Final.java
// access flags 0x12
private final Ljava/lang/String; second
// access flags 0x2
private Ljava/lang/String; first
// access flags 0x1
public <init>(Ljava/lang/String;Ljava/lang/String;)V
L0
LINENUMBER 5 L0
ALOAD 0
INVOKESPECIAL java/lang/Object.<init> ()V
L1
LINENUMBER 6 L1
ALOAD 0
ALOAD 1
PUTFIELD Final.first : Ljava/lang/String;
L2
LINENUMBER 7 L2
ALOAD 0
ALOAD 2
PUTFIELD Final.second : Ljava/lang/String;
L3
LINENUMBER 8 L3
RETURN
L4
LOCALVARIABLE this LFinal; L0 L4 0
LOCALVARIABLE first Ljava/lang/String; L0 L4 1
LOCALVARIABLE second Ljava/lang/String; L0 L4 2
MAXSTACK = 2
MAXLOCALS = 3
}
Как видно, в сгенерированном байткоде, у final String second
исчез модификатор final
- Ljava/lang/String;
Т.е. в случае использования final
как параметра метода или конструктора, ограничения накладываются только на этап компиляции (т.е. компилятор выдаст ошибку, если вы будете изменять значение final
переменной), а в байткоде эти модификаторы будут банально отброшены, так как особого смысла в них уже не будет.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Чтобы упростить понимание моего вопроса, я максимально упрощу ситуациюУ меня есть проекы Hotel и Configurator
Всем приветВ приложения при нажатии на кнопу выбираем изоброжения из галереи
Добрый день! Появилась задача написать player который будет проигрывать потоковое видео с определенных сайтов, например youtube