使用运算符和决策构造:引用和局部变量

时间:2015-02-07 16:11:49

标签: java variables pass-by-reference pass-by-value

N.B。我对以下Enthuware.com答案的答案一无所知,sb.append(str)似乎导致主sb的变化,但sb = null却没有。

以下课程的输出是什么?

 public class TestClass{
  public void testRefs(String str, StringBuilder sb){
    str = str + sb.toString();
    sb.append(str);
    str = null;
    sb = null;
  }
  public static void main(String[] args){
    String s = "aaa";
    StringBuilder sb = new StringBuilder("bbb");
    new TestClass().testRefs(s, sb);
    System.out.println("s="+s+" sb="+sb);
  }
}

s = aaa sb = bbb

s = null sb = null

s = aaa sb = null

s = null sb = bbbaaa

答案是:s = aaa sb = bbbaaabbb

永远记住,字符串是不可变的,你不能改变它们。在这种情况下,s指的是" aaa",无论testRefs()方法做什么,main()的变量s都会指向同一个字符串" aaa"。另一方面,StringBuilder是可变的。所以,最初sb指向一个包含" bbb"的StringBuilder对象。它的引用传递给testRefs()方法。在该方法中,我们将局部变量str更改为指向新字符串" aaa" +" bbb" =" aaabbb"。然后我们将此附加到某人身上。因此,sb现在包含" bbbaaabbb"。将本地引用str和sb(在方法testRefs()中)设置为null,不会影响main()方法的变量s和sb。

0 个答案:

没有答案