谁有权决定?
编辑:显然我没有成功地完善我的问题.
我不是在问Java的论证是如何传递的.我知道看起来像持有对象的变量实际上是一个包含对象引用的变量,并且该引用是按值传递的.这里有很多很好的解释(在链接的线程和其他线程中)和其他地方.
问题是关于术语传递的技术含义.(结束编辑)
我不确定这是否是SO的正确问题,如果没有道歉,但我不知道更好的地方.在这里的其他问题中已经说了很多,例如Java是"传递参考"还是"传递价值"?并通过引用或通过值传递?,但我没有找到该术语含义的权威答案.
我认为"通过引用传递"意味着"将引用(通常是指针)传递给对象",因此被调用者可以修改调用者看到的对象,而"按值传递"意味着复制对象,并让被调用者玩得开心(显而易见的问题:如果对象包含引用,深层复制或浅层).
唱FW变成了很多 的 地方 说: "按引用传递"的意思只是说,这里有一些说法,这意味着更多的,但仍然定义读
一种ParameterPassing模式,其中将实际参数的引用(或者如果你想在政治上不正确,指针)传递给形式参数; 当被调用者需要形式参数时,它取消引用指针以获取它.
我没有发现许多地方给出了更强的术语定义,在这个页面上,我发现"形式参数的左值设置为实际参数的左值".并且,如果我理解正确,这里使用相同的定义("形式参数仅作为实际参数的别名.")
事实上,我发现使用更强定义的唯一地方是反对这样一种观点,即在Java中,对象是通过引用传递的(这可能是由于我缺乏google-fu).
所以,如果我把事情弄清楚,那就是通过参考传递
class Thing { ... }
void byReference(Thing object){ ... }
Thing something;
byReference(something);
Run Code Online (Sandbox Code Playgroud)
根据第一个定义大致对应(在C中)
struct RawThing { ... };
typedef RawThing *Thing;
void byReference(Thing object){
// do something
}
// ...
struct RawThing whatever = blah();
Thing something = &whatever;
byReference(something); // pass whatever by reference …Run Code Online (Sandbox Code Playgroud) 我对java比较陌生,没有指针的引用传递让我感到困惑.我为家庭作业编写了一个函数,要求我返回用户输入的长度,并将使用输入分配给传入的数组,当方法退出用户输入数组丢失时,出现了什么问题.
public static int readArray(char[] intoArray)
{
char[] capture = captureInputAsCharArray(); //User input comes back as char[]
System.arraycopy(intoArray,0, capture, 0, capture.length);
return capture.length;
}
public static main(String[] args)
{
size = readArray(arrItem7); // item 7
System.out.println(size);
printOneInLine(arrItem7); // prints individual elements of array
}
Run Code Online (Sandbox Code Playgroud)