基本类型传的是值,例如:int,float,double,char,不包括 java.lang.String
对象实例,接口实例传的是引用,包括java.lang.String。但是我们在通过一个函数传递String参数时,为何出来的结果没有发生改变?如下所示:
void public func(String str){
str = "ssss";
}
String str = "s";
func(str);
System.out.println(str); //结果还是输出 “s”
本质来说,传引用也是传值(句柄的值)。
在函数里如果改变句柄的值:
比如新new了一个对象,句柄值就传不出来,换个说法,如果你想让传进去对象(不是句柄)出了函数改变的话,一般都有.操作符,即
句柄.对象成员 = 新值。
用c语言的观点是,传一个对象的句柄就是传进去一级指针比如p,如果你用了
p = new XXX或者p++;出来后根本不改变主调函数的p指向的内容。但是如果你用p->member = xxx;出来的话p指向的内容就改变了。
所以总结一下,java是传值的(基本变量传的是值的拷贝,对象传的句柄的拷贝)。