値セマンティクスとは何ですか’および‘ポインターセマンティクス’平均?

StackOverflow https://stackoverflow.com/questions/166033

質問

‘値セマンティクス’が意味するもの、および‘暗黙的なポインターセマンティクス’が意味するもの

役に立ちましたか?

解決

Javaは、オブジェクトタイプには暗黙的なポインタセマンティクスを、プリミティブには値セマンティクスを使用しています。

値のセマンティクスは、値を直接処理し、コピーを渡すことを意味します。 ここでのポイントは、価値があるとき、あなたの背中の後ろでそれが変わらないことを信頼できるということです。

ポインタセマンティクスでは、値はなく、「アドレス」があります。 他の誰かがそこにあるものを変更することができます、あなたは知ることができません。

C ++のポインタセマンティクス:

void foo(Bar * b) ...
... b->bar() ...

ポインタのセマンティクスを要求するには*が必要です->指示先のメソッドを呼び出します。

Javaの暗黙的なポインタセマンティクス:

void foo(Bar b) ...
... b.bar() ...

値のセマンティクスを使用する選択肢がないため、*は不要であり、->の区別も必要ありません。および。、したがって暗黙的です。

他のヒント

基本的に、値のセマンティクスとは、ある値を別の値に割り当てるとコピーが作成されることを意味します。

int x = 1;
int y = x;
x = 2; // y remains the same!

特殊なケースは、引数が渡される関数呼び出しです:

void f(int x) {
    x = 5;
}

int a = 1;
f(a);
// a is still 1

これは、実際にはJavaとC ++で同じです。ただし、Javaは、 int double boolean 、および char のほか、この方法で動作する列挙型。他のすべてのタイプは参照セマンティクスを使用します。つまり、ある値を別の値に割り当てると、基になる値をコピーするのではなく、実際にポインターをリダイレクトします。

class Foo {
    int x;

    public Foo(int x) { this.x = x; }
}

Foo a = new Foo(42);
Foo b = a; // b and a share the same instance!
a.x = 32;
//b.x is now also changed.

ただし、いくつかの注意事項があります。たとえば、多くの参照型( String Integer …)は実際には不変です。それらの値は変更できず、それらへの割り当ては古い値を上書きします。

また、引数はまだ値で渡されます。つまり、関数に渡されるオブジェクトの値は変更できますが、その参照は変更できません。

void f(Foo foo) {
    foo.x = 42;
}

void g(Foo foo) {
    foo = new Foo(42);
}

Foo a = new Foo(23);
f(a);
// a.x is now 42!

Foo b = new Foo(1);
g(b);
// b remains unchanged!

Javaは値渡しです。 C ++では、値と参照の両方のセマンティクスを使用できます。

http://javadude.com/articles/passbyvalue.htm

Javaは変数アクセス暗黙のポインターセマンティクスを使用します(参照を直接編集することはできません。自動的に(暗黙的に)アクセス時にオブジェクトに解決されます) 渡すパラメーターのセマンティクス

Javaアプリケーションでの値渡しのセマンティクス

  

Javaアプリケーションでは、オブジェクトが   参照はメソッドへのパラメーターであり、   あなたはのコピーを渡している   参照(値渡し)ではなく   参照自体。ことに注意してください   メソッドのオブジェクト参照の呼び出し   コピーは同じものを指している   オブジェクト。これは重要です   区別。 Javaアプリケーションは   合格するとき、何も変わりません   C ++などのさまざまなタイプのパラメーター   します。 Javaアプリケーションはすべて合格   値ごとのパラメータ、したがって   に関係なく、すべてのパラメーターのコピー   タイプ。

ショート:Javaのすべてのパラメーターは値で渡されます。しかし、それはオブジェクトがコピーされることを意味するのではなく(PHP4のデフォルトのように)、そのオブジェクトへの参照はコピーされます。

すべての説明と詳細な例は、 Javaアプリケーションでの値渡しのセマンティクス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top