fuliang2008
发贴: 4
积分: 0
|
于 2005-08-03 20:51
先对大家说声对不起,我所说by value的意思可能和各位名家以及sun的意思 有所不同,也可能受c++影响太重。现向大家澄清一下事实(发贴前我也没有意识 到这个问题,我在看《Thinking in java》第二版 我可能误会作者,作者在标题上写的是Pass by value,但后面也没有说自己的观点。)(讽刺的是今天我要引用《Thinking in java》第一版 来说明我对by value的理解和各位名家以及sun的理解) 1) Java按值传递任何东西。若将基本数据类型传递进入一个方法,会明确得到基本数据类型的一个副本。但若将一个句柄传递进入方法,得到的是句柄的副本。所以人们认为“一切”都按值传递。当然,这种说法也有一个前提:句柄肯定也会被传递。但Java的设计方案似乎有些超前,允许我们忽略(大多数时候)自己处理的是一个句柄。也就是说,它允许我们将句柄假想成“对象”,(所以说object也是传值)因为在发出方法调用时,系统会自动照管两者间的差异。 (2) Java主要按值传递(无自变量),但对象却是按引用传递的。得到这个结论的前提是句柄只是对象的一个“别名”,所以不考虑传递句柄的问题,而是直接指出“我准备传递对象”。由于将其传递进入一个方法时没有获得对象的一个本地副本,所以对象显然不是按值传递的。Sun公司似乎在某种程度上支持这一见解,因为它“保留但未实现”的关键字之一便是byvalue(按值)。但没人知道那个关键字什么时候可以发挥作用。 我所说的by value正式第(2)中理解 ,而sun则是第一种理解。
|