Modify non immutable object, java

天涯浪子 提交于 2020-01-07 09:56:08

问题


I am confused with this example :

StringBuilder a = new StringBuilder("abcde");
String subStr = a.substring( a.indexOf("a") , a.indexOf("c")  );
int leng = a.length();
char ch = a.charAt(4);
System.out.println( subStr + " " + leng + " " + ch);
//the result will be : subStr = abc  , leng = 5  ch = e

My question is : Why ch = e and it doesn't create an Exception ?

My thinking:
I have one StringBuilder, a non immutable object and if I use a method on the object it will return me a new value of the object with the same reference object.

  • Why when I am using a.substring ( int a, int b ), it is not modifying the object StringBuilder ?
  • Why if I use the method a.append("value") I am modifying the value of the StringBuilder object?

回答1:


I have one StringBuilder, a non immutable object and if I use a method on the object it will return me a new value of the object with the same reference object.

  • Not always will a method return you the same reference object. It might create a new object and return that. Its always better to check the docs before you assume anything.

Why when I am using a.substring ( int a, int b ), it is not modifying the object StringBuilder?

  • If you read the documentation, it clearly states that substring(int,int) method Returns a new String. That answers why your object is not being modified.

Why if I use the method a.append("value") I am modifying the value of the StringBuilder object?

  • Again if you read the docs for append(String), it clearly states that it - Returns: a reference to this object.. This method complies with what "your thinking" was.



回答2:


The .substring() method is returning a new String object, it does not modify the StringBuilder itself.




回答3:


Why when i am using a.substring ( int a, int b ) it is not modifying the object StringBuilder ?

because substring() returns a new string ,it doesn't modify StringBuilder.

char ch = a.charAt(4); , charAt() returns a char based on the index and since index is zero base ,it returns e.




回答4:


Just because an object is 'mutable' does not mean every method that object can perform has to modify it. Common examples are equals(), getClass() ... append() however does modify the StringBuilder object.



来源:https://stackoverflow.com/questions/34482754/modify-non-immutable-object-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!