Uso dos : (dois pontos) na estrutura for

Olá beleza?
Estou com uma dúvida na estrutura for.

// Estruturas funcionando perfeitamente
Gostaria de esclarecer uma dúvida.

String[] partes = dados.nomeCompleto.split(" ");
        StringBuilder sb = new StringBuilder();
        for (String parte : partes) {
            String word = parte;
            word = word.substring(0, 1).toUpperCase().concat(word.substring(1));
            sb.append(" ").append(word);
        }

O uso dos : (dois pontos) no for realmente equivale a uma simplificação disso? ¬

String[] partes = dados.nomeCompleto.split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < partes.length; i++) {
            String word = partes[i];
            word = word.substring(0, 1).toUpperCase().concat(word.substring(1));
            sb.append(" ").append(word);
        }

Eu estou usando essa estrutura em um exercício do curso para pegar o nome completo de um usuário e destacas as letras iniciais do nome em caixa alta. Ambas as formas funcionaram perfeitamente, a própria IDE que uso sugeriu essa simplificação (eu uso o IntelliJ). Eu gostaria muito de entender melhor as aplicações dos : (dois pontos) no Java. Muito obrigado desde já.

1 curtida

Esse é o enhanced for, e basicamente sim, as 2 formas são equivalentes. Só que no seu caso, poderia simplificar um pouco mais, pois no primeiro caso não precisa da variável parte, pode usar word direto:

for (String word : partes) {
    word = word.substring(0, 1).toUpperCase().concat(word.substring(1));
    sb.append(" ").append(word);
}

A diferença, claro, é que assim você não tem acesso ao índice (ao i). Mas se você não precisa do índice e só quer os valores do array, então fica mais sucinto usar o enhanced for.


Um detalhe é que o enhanced for não pode ser usado para modificar o array:

for (String word : partes) {
    word = "abc"; // Não modifica o array "partes"
}

No código acima, o array partes não é modificado. Neste caso, o único jeito é usar os índices:

for (int i = 0; i < partes.length; i++) {
    partes[i] = "abc";
}

Mas se você só quer iterar pelos valores do array, sem precisar saber do índice, pode usar o enhanced for sem problemas.

1 curtida