A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山里孩子 中级黑马   /  2015-3-24 23:01  /  1186 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面代码的输出结果是什么呢?
  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. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

6 个回复

正序浏览
liyanghml 发表于 2015-3-24 23:52
第一个结果:Hello
第二个结果:Helloabc
第一个:我以为是虽然调用change方法但是。内部并没有具体的把你 ...

果真啊  二级常考这样的题 又被骗了一次
回复 使用道具 举报
str是一个变量,在调用带参数的方法时,实参的值传递给形参的过程中,如果实参是变量而不是直接量,
则只将该变量的值传递给形参。无论形参在方法中是否改变,该实参变量都不受影响。
回复 使用道具 举报
这听说是道面试题,见过的!挺有代表性!
回复 使用道具 举报
:o                                   
回复 使用道具 举报
我记得视频里老师好像说过,在内存中定义好了的String字符串是不会被改变的,所以第一个输出的依然是Hello,第二个是Helloabc
回复 使用道具 举报
本帖最后由 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);
     }
}

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马