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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程序猿小哲 中级黑马   /  2015-9-29 16:21  /  475 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 程序猿小哲 于 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里面却又有影响

4 个回复

倒序浏览
  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.         }
复制代码
结果:

回复 使用道具 举报
问题出在这里
13行s1.replace('a','k'); 改成s1=s1.replace('a','k');
17行一样的
回复 使用道具 举报

感觉解释很到位了
回复 使用道具 举报
懂了,谢谢,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马