JAvaのパラメータ伝達方式
ネット上のjavaパラメータの伝達方法に関する文章をたくさん見て、要領が悪いと感じました.まあ、私も説明してみましょう.
コンパイル理論によれば、パラメータ伝達は伝達値、アドレスの2つの主要な方式(他にも伝達名と伝達結果がある)のみであり、1つの言語には一般的に1つのパラメータ伝達方式しかない.伝値は伝値のコピーで、とても理解しやすい--C/C++、Javaはすべて伝値方式で、しかもこの方式しかありません!
JAva基本タイプの値は説明するまでもなく、javaオブジェクトタイプの値はオブジェクトのメモリ内のアドレスであり、パラメータとして渡す場合、両者はまったく同じであり、いずれも値のコピーであり、1つの方法では、形式パラメータとしての変数に値を付与(書き換える)することができ、実際のパラメータとして渡される変数の値(呼び出しを行う上記環境にある)に影響を与えない.分岐しやすいのは、1つの方法では、オブジェクトタイプのパラメータを利用して指向されたオブジェクトにアクセスして修正することは、確かに上記の環境にあるオブジェクト(くだらない話、本来は同じオブジェクト)に影響を及ぼすことであり、javaには「アドレス」や「インデックス」というパラメータの伝達方式もあると考えられているが、それは、伝達されたアドレスの値のコピーにすぎない.(またはアドレス)上のオブジェクトが操作されるだけで、形式パラメータとしての変数は、上記の環境とは無関係にコピーされます.
引用を伝えるのはどういうことですか.実は、引用はC++が導入した新しいデータ型にすぎません.純粋にポインタの使用を便利にするためで、本質的にはポインタで、両者はオブジェクトのアドレスで、違いは:参照は宣言時にオブジェクトを指す必要があります.ポインタは使用しません(参照はオブジェクトの別名であり、非常に正しいと言われています). 参照は付与できない(書き換えアドレス)、ポインタは である.参照は空(NULL)にすることはできません.ポインタは にすることができます.オブジェクトメンバーまたはプロパティにアクセスするオペレータは異なり、参照は'.'、ポインタは'-> です.
Cにはポインタタイプがあり、C++には参照タイプが追加され、javaはCとC++を継承していますが、javaのオブジェクトの伝達方式はCのポインタに似ています.「参照の伝達」は言わないほうがいいです.そんな方法はありません.
付:形式パラメータと実際のパラメータは何ですか.
コンパイル理論によれば、パラメータ伝達は伝達値、アドレスの2つの主要な方式(他にも伝達名と伝達結果がある)のみであり、1つの言語には一般的に1つのパラメータ伝達方式しかない.伝値は伝値のコピーで、とても理解しやすい--C/C++、Javaはすべて伝値方式で、しかもこの方式しかありません!
JAva基本タイプの値は説明するまでもなく、javaオブジェクトタイプの値はオブジェクトのメモリ内のアドレスであり、パラメータとして渡す場合、両者はまったく同じであり、いずれも値のコピーであり、1つの方法では、形式パラメータとしての変数に値を付与(書き換える)することができ、実際のパラメータとして渡される変数の値(呼び出しを行う上記環境にある)に影響を与えない.分岐しやすいのは、1つの方法では、オブジェクトタイプのパラメータを利用して指向されたオブジェクトにアクセスして修正することは、確かに上記の環境にあるオブジェクト(くだらない話、本来は同じオブジェクト)に影響を及ぼすことであり、javaには「アドレス」や「インデックス」というパラメータの伝達方式もあると考えられているが、それは、伝達されたアドレスの値のコピーにすぎない.(またはアドレス)上のオブジェクトが操作されるだけで、形式パラメータとしての変数は、上記の環境とは無関係にコピーされます.
引用を伝えるのはどういうことですか.実は、引用はC++が導入した新しいデータ型にすぎません.純粋にポインタの使用を便利にするためで、本質的にはポインタで、両者はオブジェクトのアドレスで、違いは:
Cにはポインタタイプがあり、C++には参照タイプが追加され、javaはCとC++を継承していますが、javaのオブジェクトの伝達方式はCのポインタに似ています.「参照の伝達」は言わないほうがいいです.そんな方法はありません.
付:形式パラメータと実際のパラメータは何ですか.
class A
{
void f(int i) // i
{
i = 100;
....
}
}
int i = 100;
A a = new A();
a.f(i); // i
....