(原)String、StringBuilder、StringBuffer作为形参

时间:2022-03-05 02:19:42

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

当String类型作为参数时,

 public class Test
{
public static void main(String[] args)
{
String sb=new String();
Test.TestString(sb);
System.out.println("实参为: "+sb.toString()); } public static void TestString(String s)
{
s="5";
System.out.println("形参为: "+s);
}
}

输出结果为:

(原)String、StringBuilder、StringBuffer作为形参

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

当StringBuilder类型作为参数时,

 public class Test
{
public static void main(String[] args)
{
StringBuilder sb=new StringBuilder();
Test.TestString(sb);
System.out.println("实参为: "+sb.toString()); } public static void TestString(StringBuilder s)
{
s.append("5");
System.out.println("形参为: "+s);
}
}

(原)String、StringBuilder、StringBuffer作为形参

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

 public class Test
{
public static void main(String[] args)
{
StringBuffer sb=new StringBuffer();
Test.TestString(sb);
System.out.println("实参为: "+sb.toString()); } public static void TestString(StringBuffer s)
{
s.append("5");
System.out.println("形参为: "+s);
}
}

(原)String、StringBuilder、StringBuffer作为形参

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

其区别在于:String类不可变

(原)String、StringBuilder、StringBuffer作为形参

而StringBuilder与StringBuffer可变

(原)String、StringBuilder、StringBuffer作为形参

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

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