黑马程序员技术交流社区

标题: 还请大神予以帮助 [打印本页]

作者: 程序猿小哲    时间: 2015-9-29 16:21
标题: 还请大神予以帮助
本帖最后由 程序猿小哲 于 2015-9-29 16:23 编辑
  1. class Test{
  2. public static void main(String[] args) {
  3. String s1 = "java";
  4. String s2 = "hello";
  5. method_1(s1,s2);
  6. System.out.println(s1+"...."+s2); //java....hello
  7. StringBuilder s11 = new StringBuilder("java");
  8. StringBuilder s22 = new StringBuilder("hello");
  9. method_2(s11,s22);
  10. System.out.println(s11+"-----"+s22); //javahello-----hello
  11. }
  12. public static void method_1(String s1,String s2){
  13. s1.replace('a','k');
  14. s1 = s2;
  15. }
  16. public static void method_2(StringBuilder s1,StringBuilder s2){
  17. s1.append(s2);
  18. s1 = s2;
  19. }
  20. }
复制代码
不是太明白,为什么调用方法之后会没有变化?!是因为形参和实参的原因吗?!那为什么在StringBuffered里面却又有影响

作者: Smilexs    时间: 2015-9-29 17:43
  1. public static void main(String[] args) {
  2.                 String s1 = "java";
  3.                 String s2 = "hello";
  4.                 s1 = method_1(s1, s2);//获取返回值,修改内容
  5.                 System.out.println(s1 + "...." + s2); // java....hello
  6.                 StringBuilder s11 = new StringBuilder("java");
  7.                 StringBuilder s22 = new StringBuilder("hello");
  8.                 method_2(s11, s22);
  9.                 System.out.println(s11 + "-----" + s22); // javahello-----hello
  10.         }

  11.         public static String method_1(String s1, String s2) {
  12.                 /*
  13.                  *replace()不会直接改变对象值,你需要获取其返回值
  14.                  */
  15. //                s1.replace('a', 'k');
  16. //                System.out.println(s1);//这样输出结果没变
  17. //                s1 = s2;//函数里面 传进来是 形参,赋值不会影响实参
  18.                 return s1.replace('a', 'k');
  19.         }

  20.         public static void method_2(StringBuilder s1, StringBuilder s2) {
  21.                 s1.append(s2);//这边修改的是: 引用s1(形参和实参指向同一个对象)指向的对象内容(在堆里面),所以会影响实参
  22. //                s1 = s2;//同上解释
  23.         }
复制代码
结果:


作者: 头撞豆腐    时间: 2015-9-29 18:07
问题出在这里
13行s1.replace('a','k'); 改成s1=s1.replace('a','k');
17行一样的

作者: 18201432758    时间: 2015-9-29 21:46
Smilexs 发表于 2015-9-29 17:43
结果:

感觉解释很到位了
作者: 程序猿小哲    时间: 2015-9-30 17:06
懂了,谢谢,谢谢




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