Как отмечают @Erwin Bolwidt и другие, StringBuffer не будет работать для значений выше максимального значения int, а также зависит от памяти, доступной для вашей виртуальной машины. Ваша программа, вероятно, ударит OutOfMemory на том или ином этапе задолго до этого предела, потому что StringBuffer.append работает, перераспределяя больший и копируя символы, когда он достигает текущего размера буфера, поэтому у вас должно быть место для 2 огромных строк в память сразу.
Вы можете обойти некоторые проблемы, сделав infiniteString () preize с конструктором «new StringBuffer (int someLength)» с количеством символов, которые вы хотите добавить, это позволяет избежать перераспределения внутренних буфер после первоначального предварительного определения размера.
Если вы избежали OOM к этому моменту, строка infiniteString.toCharArray () также делает копию буфера. Если вы заставляете infiniteString () возвращать свой StringBuffer, вы можете вызывать sb.charAt и sb.length при циклическом переборе символов, а не char []
Каждый вызов String.valueOf (StringBuilder) копирует буфер, это может ускорить время до OOM.