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

© kongdun1991 中级黑马   /  2016-6-1 22:37  /  479 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Dmeo {
  2.         public static void main(String[] args) {
  3.                 String s1 = "hello";
  4.                 String s2 = "world";
  5.                 System.out.println(s1 +"-------" + s2);//hello-----world
  6.                 change1(s1,s2);
  7.                 System.out.println(s1 +"-------" + s2);//world-----worldworld
  8.                
  9.                 StringBuffer s3 = new StringBuffer("hello");
  10.                 StringBuffer s4 = new StringBuffer("world");
  11.                 System.out.println(s3 +"-------" +s4);//
  12.                 change2(s3,s4);
  13.                 System.out.println(s3 +"-------" +s4);
  14.         }

  15.         private static void change2(StringBuffer s3, StringBuffer s4) {
  16.                 s3 = s4;
  17.                 s4 = s3.append(s4);
  18.         }

  19.         private static void change1(String s1, String s2) {
  20.                 s1 = s2;
  21.                 s2 = s1 + s2;
  22.         }

  23. }
复制代码


解释一下为何运行结果是这样的

1 个回复

倒序浏览
String对象一旦创建就不会改变,而StringBuffer是可以改变的字符串,所以对于change1不管里面怎么变化都不会影响,但是对于change2的话,它的改变就直接影响到了堆内存的StringBuffer对象属性,所以会改变,这是参数传递问题,java只有个值传递,只用对象属性改变了对象才改变
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马