public class Memory { public static void main(String[] args) { String[] memory = {"object15", null, null, "object2", null, null, null, "object32", null, "object4"}; executeDefragmentation(memory); System.out.println(Arrays.toString(memory)); } public static void executeDefragmentation(String[] array) { String[] temp = new String[array.length]; int j = 0; for (int i = 0; i < array.length; i++) { if (array[i] != null) { temp[j] = array[I]; // отправляем элементы не null в новый массив , а куда деваются null? ну то есть как они откидываются именно в конец как нам надо j++; } } for (int i = 0; i < array.length; i++) { array[i] = temp[I]; // зачем этот цикл? и почему тут temp [i], а не temp[j] как было сверху } } }