Переменные не собираются мусором - объекты есть.
"fn" - строковый литерал, поэтому он будет интернирован . Он не будет собирать мусор (по крайней мере, пока этот ClassLoader активен; не уверен, есть ли один пул для каждого CL или один для всей JVM, но это, вероятно, не имеет значения), и один и тот же строковый объект будет использоваться при каждом вызове.
Если вы сделаете его публичным статическим финалом, то определенно будет улучшением, так как конкатенация может выполняться компилятором, а не во время выполнения.
Если вы сделаете его окончательным в методе (т.е. все еще в качестве локальной переменной), то может иметь тот же эффект - я не уверен.