i was just wondering if anybody could help me out with this :
StringBuilder s=new StringBuilder("0123456789");
s.substring(1, 2);
System.out.println(s);
s.delete(2, 8);
System.out.println(s);
the first Sysout gives 0123456789(although i expected a substring) but other Sysout gives 0189. I have noticed that also with some Time and Date classes.How can i figure out, when what form is going to modify original object (in this case s). Is this related to Mutability of objects? Is there any general rule? Thanks in advance HK
If you see the
substring
method definition inAbstractStringBuilder
abstract class which later extended byStringBuilder
class, you will find below code:From the method definition you can see that it is returning a new
String
object, the method is not working on actualStringBuilder
content. So their will no change in the content ofStringBuilder
object but rather a newString
object will be returned.Now if you see
delete
method definition insideStringBuilder
class it is:And the definition of delete in
AbstractStringBuilder
(StringBuilder
super class) is :From the method definition it could be clearly understood that it is working on same
StringBuilder
object content and it is not returning a new object but rather the same object reference which is passed to it.