按值通报
首先要办理术语的问题,最适合“按值通报”的看起来是自变量。“按值通报”以及它的寄义取决于如何领略措施的运行方法。最常见的意思是得到要通报的任何对象的一个当地副本,但这里真正的问题是如何对待本身筹备通报的对象。对付“按值通报”的寄义,今朝存在两种存在明明区此外看法:
(1) Java按值通报任何对象。若将根基数据范例通报进入一个要领,会明晰获得根基数据范例的一个副本。但若将一个句柄通报进入要领,获得的是句柄的副本。所以人们认为“一切”都按值通报。虽然,这种说法也有一个前提:句柄必定也会被通报。但Java的设计方案好像有些超前,答允我们忽略(大大都时候)本身处理惩罚的是一个句柄。也就是说,它答允我们将句柄假想成“工具”,因为在发出要领挪用时,系统会自动照管两者间的差别。
(2) Java主要按值通报(无自变量),但工具却是按引用通报的。获得这个结论的前提是句柄只是工具的一个“别名”,所以不思量通报句柄的问题,而是直接指出“我筹备通报工具”。由于将其通报进入一个要领时没有得到工具的一个当地副本,所以工具显然不是按值通报的。Sun公司好像在某种水平上支持这一看法,因为它“保存但未实现”的要害字之一即是byvalue(按值)。但没人知道谁人要害字什么时候可以发挥浸染。
尽量存在两种差异的看法,但其间的分歧归根到底是由于对“句柄”的差异表明造成的。我规划在本书剩下的部门里回避这个问题。各人不久就会知道,这个问题争论下去其实是没有意义的——最重要的是领略一个句柄的通报会使挪用者的工具产生意外的改变。