JhowTroMundo:
De qualquer forma, nao vejo por quê verificar se uma string comtém algum número char a char sendo que o regex faz isso pra você em uma linha de codigo. Não sei como funciona internamente, mas creio que seja mais rápido do que um for encadeado.
boolean naoContemNumeros = campo.matches("[A-Z a-z Çç]{"+campo.length()+"}");
Talvez para ter certeza? Seu regex, por exemplo, retorna false também caso a string tenha coisas diferentes de letras: virgulas, travessão, caracteres especiais, etc… ela não está negando só números.
Sem falar que a performance do método que indiquei é maior que a do Regex. Expressões regulares, por mais otimizadas que sejam, são bastante lentas, principalmente se houver uma execução esporádica.
Se brincar seu código, em termos de tempo de execução, é ainda pior do que a alternativa do colega, com um if dentro de outro.
Não esqueça que a expressão tem de ser parseada e interpretada (você pode ganhar performance se fizer isso uma vez só, mas na maioria das vezes criamos o regex dentro do método).
Elas só são úteis porque, na maioria das vezes, não precisamos de tanta performance assim e é preferível usar um código claro e sucinto do que um código otimizado e complexo.
Finalmente, vale lembrar as dicas quando o assunto é performance: http://www.guj.com.br/java/31346-regras-de-programacao/2#989991