Вы не можете объявить и инициализировать переменную второго типа, но вы можете иметь несколько переменных (возможно, с инициализацией) одного типа.
Это распространенная идиома кэширования for
в локальной переменной:
String s = "Hello";
for (int i = 0, L = s.length(); i < L; i++) {
System.out.println(s.charAt(i));
} // prints "H", "e", "l", "l", "o"
Это общая идиома для отображения массива 1D-2D:
int[] arr1d = new int[9];
int[][] arr2d = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
for (int r = 0, i = 0; r < 3; r++) {
for (int c = 0; c < 3; c++) {
arr1d[i++] = arr2d[r][c];
}
}
System.out.println(Arrays.toString(arr1d));
// prints "[1, 2, 3, 4, 5, 6, 7, 8, 9]"
Эта идиома двух итераторов, приходящих с обоих концов, также распространена:
boolean isPalindrome(String s) {
for (int i = 0, j = s.length() - 1; i < j; i++, j--) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
}
return true;
}