Ecco il tuo metodo Java ottimizzato.
Ora ad ogni ciclo for la VM non è costretta a ricalcolarsi una radice quadrata che non è cambiata.
Inoltre l'incremento salta tutti i numeri pari, perché il modulo 2 viene eseguito a priori.
codice:
public static boolean prim (int a) {
   if (a > 2 && a % 2 == 0)
      return false;
   for (int i = 3, l = Math.sqrt(a); i <= l; i += 2)
      if (a % i == 0)
         return false;
   return true;
};
Niente autografi, prego.
ma quali autografi...POMODORI IN FACCIA !!!

scherzi a parte,il programma cosi' funziona meglio, il doppio assegnamento nel for non l'avevo mai visto, solo ke ci sono DUE PROBLEMINI NEL TUO CODICE!

innanzi tutto cosi' non funziona perchè all'intero l assegni un double quindi devi usare un cast...ma poco importa...

secondariamente il programma SBAGLIA NEI CASI BASE...e cioè dice che sia 0 che 1 sono numeri primi, in quanto lo 0 è per definizione multiplo di tutti i numeri, mentre l'uno non è primo per definizione.
La tua procedura corretta è cosi':

codice:
public static boolean bol (int a) {
   if (a < 3) return (a>1);
   for (int i = 3, l = (int) Math.sqrt(a); i <= l; i += 2)
      if (a % i == 0)
         return false;
   return true;
}
ora applaudi me!