修改非永久对象java

时间:2015-12-27 17:06:48

标签: java substring stringbuilder

我对这个例子感到困惑:

<c:out value="${index + 1}"/>

我的问题是:为什么 ch = e 并且它没有创建异常?

我的想法:
我有一个StringBuilder,一个非永久对象,如果我在对象上使用一个方法,它将返回一个具有相同引用对象的对象的新值。

  • 为什么当我使用rtsp://[my device ip, which is known to me]:554/[unknown to me path] 时,它没有修改对象StringBuilder?
  • 为什么我使用方法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 我正在修改StringBuilder对象的值?

4 个答案:

答案 0 :(得分:4)

.substring()方法返回 String对象,它不会修改StringBuilder本身。

答案 1 :(得分:0)

  

为什么当我使用a.substring(int a,int b)时,它没有修改   对象StringBuilder?

因为substring()返回一个新字符串,所以它不会修改StringBuilder

char ch = a.charAt(4);charAt()根据索引返回一个字符,因为索引为零基础,它返回e

答案 2 :(得分:0)

仅仅因为对象是“可变的”并不意味着对象可以执行的每个方法都必须修改它。常见的例子是equals(),getClass()... append()但确实修改StringBuilder对象。

答案 3 :(得分:0)

  

我有一个StringBuilder,一个非永久对象,如果我在对象上使用一个方法,它将返回一个具有相同引用对象的对象的新值。

  • 方法并不总是会返回相同的引用对象。它可能会创建一个新对象并返回该对象。在假设任何事情之前检查docs总是更好。

  

为什么当我使用a.substring ( int a, int b )时,它不会修改对象StringBuilder

  • 如果您阅读documentation,则会明确指出substring(int,int)方法返回新字符串 。这就解释了为什么你的对象没有被修改。

  

为什么我使用方法a.append("value")我正在修改StringBuilder对象的值?

  • 再次,如果您阅读append(String)的{​​{3}},则会明确指出 - 返回:对此对象的引用。 。这种方法符合&#34;您的想法&#34;