Returns a new \String that is a copy of +string+.
With no arguments, returns the empty string with the Encoding ASCII-8BIT:
s = String.new
s # => ""
s.encoding # => #
With the single \String argument +string+, returns a copy of +string+
with the same encoding as +string+:
s = String.new('Que veut dire ça?')
s # => "Que veut dire ça?"
s.encoding # => #
Literal strings like "" or here-documents always use
Encoding@Script+encoding, unlike String.new.
With keyword +encoding+, returns a copy of +str+
with the specified encoding:
s = String.new(encoding: 'ASCII')
s.encoding # => #
s = String.new('foo', encoding: 'ASCII')
s.encoding # => #
Note that these are equivalent:
s0 = String.new('foo', encoding: 'ASCII')
s1 = 'foo'.force_encoding('ASCII')
s0.encoding == s1.encoding # => true
With keyword +capacity+, returns a copy of +str+;
the given +capacity+ may set the size of the internal buffer,
which may affect performance:
String.new(capacity: 1) # => ""
String.new(capacity: 4096) # => ""
The +string+, +encoding+, and +capacity+ arguments may all be used together:
String.new('hello', encoding: 'UTF-8', capacity: 25)