11.String和StringBuffer作为参数传递
基本数据类型是值传递:形式参数的改变不影响实际参数。
引用数据类型的是地址传递:形式的参数的改变(不new一个新对象的前提下)影响实际参数。
String虽然是引用数据类型,但是由于他是一个最终类,值不可改变(值存在常量池),所以他当参数传递时,和基本数据类型是一样的。
StringBuffer是线程安全的可变的字符串,引用数据类型,形参的改变(不new一个新对象),会影响实际参数。
今天的周考试题,感觉很有意思,自己之前理解的不够到位,以及String的特殊性质,图片是参考别的博主的,主要是没理解到位调用方法时(局部变量),会在栈中开一块空间来存引用数据类型传过来的地址!
**
* @author cc
* @version 1.0
* @date 2022/8/6 23:26
* @description:
**/
public class StringStringBufferTest {
public static void main(String[] args) {
String s1="hello";
String s2="world";
System.out.println("s1="+s1+",s2="+s2); //s1="hello" s2="world"
change(s1,s2);
System.out.println("调用方法后——————————————————");
System.out.println("s1="+s1+",s2="+s2);//s1="hello" s2="world"
StringBuffer sb1=new StringBuffer("hello");
StringBuffer sb2=new StringBuffer("world");
System.out.println("sb1="+sb1+",sb2="+sb2);//sb1="hello" sb2="world"
System.out.println("调用方法后——————————————————");
change(sb1,sb2);
System.out.println("sb1="+sb1+",sb2="+sb2);//sb1="hello" sb2="worldworld"
}
public static void change(String s1,String s2){
s1=s2;//s1="world"
s2=s1+s2;//s2="world"+"world"
}
public static void change(StringBuffer sb1,StringBuffer sb2){
sb1=sb2;//s1="world"
sb2.append(sb1);//s2="world"+"world"
}
}
//运行结果
s1=hello,s2=world
调用方法后——————————————————
s1=hello,s2=world
sb1=hello,sb2=world
调用方法后——————————————————
sb1=hello,sb2=worldworld
Process finished with exit code 0