String作为形参传的是值吗?

img

change是局部变量,最后随着方法的结束而结束,一开始good传过来,但是里面str“test ok”其实是新开的,因为String是final修饰的,不可变,等于开了新空间存保存它,最后方法结束了只是把“test ok”结束了,实际上main方法里面保存的地址还是“good”,ch[]数组本身就是地址,所以已经改变了。请问是这么理解吗??

String作为引用类型,传递的是引用,也就是地址。

可以理解为值,只是这个值比较特殊,是字符串的地址

可以

String 为引用类型,作为实参传递的是引用的一份复制。main 方法中传递给 change 方法的第一个参数可以看作是 ex.str 的一份复制,姑且叫它ex.str_2,ex.str 和 ex.str_2 一样,都指向 "good" 这个 String 对象,在 change 方法中,ex.str_2 被修改,指向了新的 String 对象 "test ok",而 ex.str 并未被改变。

实参传给行参时,实际上只是给形参在堆栈上分配一个引用,这个引用指向了实参也就指向了实参(引用)所指向的实际对象。str="test ok",你不能让实际对象指向一个实际对象,所以形参str不再指向实参,而是指向了"test ok"这个实际对象。而ch[0]=又不一样,ch引用本身不能访问元素,所以就通过形参ch指向的实参指向的实际对象访问元素并改变,此时在main方法中再次通过引用访问对象时,形参ch对应的实参对应的实际对象发生了改变。