Why would the StringBuffer
have a limit on its size?
I went through some of the links : http://www.coderanch.com/t/540346/java/java/maximum-size-hold-String-buffer.
Is that because of the count member variable, which is an int?
Suppose that we have 2^31-1 chars in StringBuffer
and that we append some more chars to that StringBuffer
. Count member variable would be incremented by the number of chars appended and if Count variable is already at its max (2^31-1), it would revert back to some negative value.
Why would it throw an error?
StringBuffer
uses achar[]
.In Java an array can be indexed only via an integer which means the highest value the index of the array can be is
Integer.MAX_VALUE
- 1 (i.e. 2^31 - 1). Which means that the size of an array in Java can not be larger thanInteger.MAX_VALUE
if you are getting anywhere near 2^31 characters in your buffer you are doing it wrong and you would have run out of memory long ago.
Answer is different based on System architecture.
This old machine when I posted answer on 2012
On 2016
Run This program your self
Output
because stringbuffer internally uses an array and the maximum number of elements an array can accommodate is 2^31-1 if you increment after reaching this it will go to negative and throws the error