qual a diferença entre eu declarar uma variável como final ou static final?
Uma variável do tipo final, depois que tem um valor atribuído a ela, o mesmo não pode ser modificado
ja uma variável do tipo static, só é instanciada uma vez na memória… ou seja, se você precisar de instanciar vários objetos e eles precisarem possuir uma variável em comum.
ok
mas e se eu fizer algo do tipo:
final int i;
static final int i;
qual a diferença?
No primeiro caso, i terá um valor constante para a instância em que for declarado. No segundo, i terá um valor constante até o termino da execução da VM.
Variáveis estáticas são as chamadas “variáveis de classe”, pois elas não são ligadas a nenhuma instância.
Costuma-se declarar constantes como static final.
Mas se eu declarar como final daria na mesma, correto?
Ambos os valores não poderão ser alterados…
Mas se você deixar como final poderá haver um existente por instância. Veja:
public class Foo {
public static final long AGORA = System.currentTimeMillis();
}
public class Bar {
public final long agora = System.currentTimeMillis();
}
Foo.AGORA terá sempre o valor que tiver quando a classe for carregada. Bar.agora terá o valor que tiver quando o construtor de cada instância de Bar rodar. Ou seja, para três instâncias de Bar (b1, b2 e b3), b1.agora terá um valor, b2.agora terá outro e b3.agora terá outro. Entendeu agora?
Você pode modificar o conteúdo de uma variável static, mas não de uma final
[quote=#@®®¡$]
Foo.AGORA terá sempre o valor que tiver quando a classe for carregada. Bar.agora terá o valor que tiver quando o construtor de cada instância de Bar rodar. Ou seja, para três instâncias de Bar (b1, b2 e b3), b1.agora terá um valor, b2.agora terá outro e b3.agora terá outro. Entendeu agora?[/quote]
Correto. Agora entendi.
Mas se eu inicializar ambas com uma constante(compile time), elas se comportarão equivalentemente, correto?
a unica diferença será que no caso de static final eu só terei uma referência na memória…é isso?
Isso.
Obrigado
:thumbup: