黑马程序员技术交流社区

标题: String类和StringBuffer小试下 [打印本页]

作者: 山里孩子    时间: 2015-3-24 23:01
标题: String类和StringBuffer小试下
下面代码的输出结果是什么呢?
  1. class  StringTest
  2. {
  3.      public static void main(String[] args)
  4.      {
  5.           String str = "Hello";
  6.           change(str);
  7.           System.out.println(str);
  8.      }

  9.      public static void change(String str)
  10.      {
  11.           str += "abc";
  12.      }
  13. }

  14. //更改为StringBuffe呢?
  15. class  StringTest
  16. {
  17.      public static void main(String[] args)
  18.      {
  19.           StringBuffer str = new StringBuffer("Hello");
  20.           change(str);
  21.           System.out.println(str);
  22.      }

  23.      public static void change(StringBuffer str)
  24.      {
  25.          
  26.           str.append("abc");
  27.      }
  28. }
复制代码




作者: liyanghml    时间: 2015-3-24 23:52
本帖最后由 liyanghml 于 2015-3-25 00:27 编辑

第一个结果:Hello
第二个结果:Helloabc
第一个:我以为是虽然调用change方法但是。内部并没有具体的把你所要改变的值取出来,所以输出的时候,str并没有改变。应该这样写,如果要输出Helloabc的话:
class  Test1
{
     public static void main(String[] args)
     {
          String st = "Hello";
          change(st);         
     }
     public static void change(String str)
     {                 
          str += "abc";
                  System.out.println(str);
     }
}


作者: 有丶时候    时间: 2015-3-25 00:12
我记得视频里老师好像说过,在内存中定义好了的String字符串是不会被改变的,所以第一个输出的依然是Hello,第二个是Helloabc
作者: 和谐木马    时间: 2015-3-25 00:47
这听说是道面试题,见过的!挺有代表性!
作者: Iterater    时间: 2015-3-25 10:18
str是一个变量,在调用带参数的方法时,实参的值传递给形参的过程中,如果实参是变量而不是直接量,
则只将该变量的值传递给形参。无论形参在方法中是否改变,该实参变量都不受影响。
作者: 高光天    时间: 2015-3-25 11:16
liyanghml 发表于 2015-3-24 23:52
第一个结果:Hello
第二个结果:Helloabc
第一个:我以为是虽然调用change方法但是。内部并没有具体的把你 ...

果真啊  二级常考这样的题 又被骗了一次




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2