Final keyword vs synchronized

Oi,

tenho uma dúvida em relação à keyword “final” e a criação de um objecto dentro de um synchronized. É óbvio que a classe onde ponho o código abaixo é acedido por várias threads, e não pode haver mais que uma instância do mesmo objecto.

Por exemplo:

ter:

public static final Myclass mc = new MyClass();

ou ter

private static Myclass mc = null;

public synchronized static getInstance()
{
  if ( mc == null )
    return mc = new Myclass();
 return mc;

}

é a mesma coisa? Se sim, porquê?

Obrigado

as variaveis static e non-static(instancia) recebem seus valores padrao qdo é criada… o que nao recebe valor padrao é as veriaveis locais…