#java
Возник вопрос о heap memory. Так вот обратите внимание на жирный курсив. в 1-м варианте все нормально работает. Но вот во втором выскакивает OutOfMemoryError: Java heap space. Кто подскажет почему? public class idea_test { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new FileReader("S:\\idea test\\src\\file.txt")); ArrayList strings = new ArrayList(); (1) String s; while ((s = reader.readLine()) != null){ strings.add(s); } (2) String s = reader.readLine(); while (s != null){ strings.add(s); } reader.close(); String[] strings1 = strings.toArray(new String[strings.size()]); Arrays.sort(strings1); for (String s1 : strings1) { System.out.println(s1); } } }
Ответы
Ответ 1
Ну так элементарно. В первом случае мы крутимся в цикле и при каждой итерации вызываем reader.readLine() после чего проверяем s на null, если все строки файла были прочитаны((s = reader.readLine()) != null == false), то благополучно вываливаемся из цикла. Во втором же случае у нас получается бесконечный цикл, так как мы один раз вызвали reader.readLine() а далее бесконечно крутимся в цикле (так как s != null - истинно всегда, ведь мы же не меняем s), добавляя в ArrayList одни и те же значения, что и приводит к OutOfMemoryError
Комментариев нет:
Отправить комментарий