zoukankan      html  css  js  c++  java
  • (原)String、StringBuilder、StringBuffer作为形参

    今天在刷一道算法题时,突然遇到StringBuilder作为形参和String作为形参时,最终得出来的结果不同。故尝试了几个demo看看它们之间的区别。

    当String类型作为参数时,

     1 public class Test
     2 {
     3     public static void main(String[] args)
     4     {
     5         String sb=new String();
     6         Test.TestString(sb);
     7         System.out.println("实参为:    "+sb.toString());
     8         
     9     }
    10     
    11     public static void TestString(String s)
    12     {
    13         s="5";
    14         System.out.println("形参为:    "+s);
    15     }
    16 }

    输出结果为:

    即说明形参的改变并不影响实参的改变,本质上是值的传递。

    当StringBuilder类型作为参数时,

     1 public class Test
     2 {
     3     public static void main(String[] args)
     4     {
     5         StringBuilder sb=new StringBuilder();
     6         Test.TestString(sb);
     7         System.out.println("实参为:    "+sb.toString());
     8         
     9     }
    10     
    11     public static void TestString(StringBuilder s)
    12     {
    13         s.append("5");
    14         System.out.println("形参为:    "+s);
    15     }
    16 }

    说明形参的改变会影响实参的改变,即引用的传递

     1 public class Test
     2 {
     3     public static void main(String[] args)
     4     {
     5         StringBuffer sb=new StringBuffer();
     6         Test.TestString(sb);
     7         System.out.println("实参为:    "+sb.toString());
     8         
     9     }
    10     
    11     public static void TestString(StringBuffer s)
    12     {
    13         s.append("5");
    14         System.out.println("形参为:    "+s);
    15     }
    16 }

    说明形参的改变会影响实参的改变,即引用的传递

    其区别在于:String类不可变

    而StringBuilder与StringBuffer可变

    默认创建了一个长度为16的数组。

    故在String作为形参时,由于String的不可变性,在作形参时形参和实参分别指向了不同的字符串,由于StringBuilder的可变性,形参还是在实参的基础上继续添加新的字符串。

  • 相关阅读:
    python的argparse模块
    Robotframework之SSHLibrary库
    Python 中的 getopt 模块
    Python list 列表
    Samba windows 10 share: mount error(112): Host is down
    安装两个版本的python安装包,后安装的python程序打开时闪退
    NetScaler VPX configration
    drupal smtp could not connect to smtp
    drupal7 判断用户是否具有某个权限
    微信支付报错:time_expire时间过短,刷卡至少1分钟,其他5分钟]
  • 原文地址:https://www.cnblogs.com/xh0102/p/5803530.html
Copyright © 2011-2022 走看看