结论:java在函数调用时是值传递而不是引用传递。 常见错误认识:如果形参是基本类型,则是值传递;如果是引用类型,则是引用传递。 当然java也不是引用传递。在java里值传递是复制一份要传递的内容传递[赋值]给被调用的形参,基本类型的数据会直接复制一份数据给形参。如果对象引用,则复制一份地址值传递给形参。一份数据既然存在就必须是有一块地方来存储它,不管它占用多大的地方,总可以通过一个起始地址来标记它的位置。所以java里引用类型是将这样的一个地址值复制一份传递给形参。 举例:把一份数据比作狗子,持有一份数据就比作手握拴了狗子的一个狗绳。 引用传递:可以认为将狗绳给了朋友(当然了狗绳的一端肯定是你的狗子),你的朋友可能将狗子涂成狗熊,也可能将狗子直接换成狗熊,事后你也会知道这个狗绳牵着的是被涂成狗熊样的你家的狗还是真的一只狗熊,因为你俩共享了一个狗绳。 值传递则是:你给你朋友另外一个狗绳,只是这个狗绳也拴着你的狗子。即你和你朋友的狗绳牵着的都是你的狗子。你朋友可以将狗子涂成狗熊,也可以将你给他的狗绳拴一个真的狗熊。若你朋友涂了你家的狗子,你会知道。但若他拴了一个真的狗熊,你未必知道。因为你的狗绳拴的是你家的狗子,经过你朋友的涂抹你也知道你家的狗子发生了什么,你之所以知道你朋友动了你家的狗子只是因为你家的狗子你也牵着呢,但如果你朋友的狗绳不再拴你家的狗子换了狗熊你也就不能通过你的狗绳知道了你朋友的狗绳拴的是什么了。