Javaの呼び出しによる検証方法

私は、 Javaは値で呼び出してすべてを行います。私はこの事実を確認する方法が不思議でしたか?私が理解する限り、オブジェクト(プリミティブではない)の場合、関数は参照の独自のコピーを取得しますが、同じオブジェクトを指します。その場合、呼び出し元関数と呼び出し元関数でのそのオブジェクトの参照は異なるはずですか?それをどのように確認できますか?つまり、オブジェクトの参照を印刷する方法です。

System.out.println(object);  //does this print reference i.e text following @

EDIT: I understand that modifying object in callee function does change the value in caller function. I am interested in how to print the references of objects as in what property can I print on console that clearly shows me 2 different reference.

3
メソッド内のパラメータ値の割り当てを変更し、メソッド外で変更されているかどうかを確認する
追加された 著者 MeBigFatGuy,
NullUserExceptionの答えを見てください
追加された 著者 MeBigFatGuy,
私の答えはこちらをご覧ください: stackoverflow.com/q/8257486/597657
追加された 著者 Eng.Fouad,
@ prap19:いいえ、そうではありません。 stackoverflow.com/questions/40480/is-java-参照渡し
追加された 著者 Evan Mulawski,
@MeBigFatGuy私はそれが変わることを知っている。私はちょうど参照が表現される方法を理解したいと思う。
追加された 著者 prap19,
@MeBigFatGuyパラメータ値の割り当てはどういう意味ですか?
追加された 著者 prap19,

3 答え

Javaは値による参照を渡します。これは、参照のコピーを取得することを意味するので、参照を解除すると、元の参照と同じオブジェクトがヒープ内に配置されます。

しかし、Javaが参照渡しされた場合:

public static void nullify(Object obj) {
    obj = null;
}

public static void main(...) {

    String x = "Hello";        
    nullify(x);

    System.out.println(x);
}

S.o.p.への呼び出し。 Javaが参照渡しの場合は null を出力します。しかし、そうではないので、 x は変更されず、 Hello が表示されます。

9
追加された
@ prap19私はあなたが私を理解しているとは思わない...参照渡しをサポートする言語では、メソッド内の obj を無効にすると、呼び出し先を含むあらゆる場所で無効になります。これは、Javaが参照渡しをサポートしていないことを証明します。
追加された 著者 NullUserException,
@ prap19 Javaはメモリアドレスを混乱させません。それは設計によるものです。 Javaでは、オブジェクトのアドレスが問題ではありません。とにかくそのアドレスを使ってオブジェクトにアクセスすることはできません。
追加された 著者 NullUserException,
あなたはそれを心配する必要はありませんので、それは抽象化されています。ポインタを乱すと、エラーが起こりやすいプロセスになります。
追加された 著者 NullUserException,
objの値を変更してみてください。私は、2つの参考文献がメイン用に作成され、1つが無効化用に作成されたことを理解する。 obj = nullにすると、1つの参照は削除されますが、mainはまだ1を保持します。
追加された 著者 prap19,
私はあなたのポイントを理解し、私は実際にオブジェクトに関するいくつかの参照情報を印刷することに興味がありますか?あなたの場合、objに関するいくつかの情報をnullify()で出力し、main()でStringと同様の情報を出力します。
追加された 著者 prap19,
hmm ok ok..iは私にそのような情報を与える公開されたapiがあるかどうか疑問に思っていました。
追加された 著者 prap19,

クラスAのプロパティをaaとする

A a= new A();
a.aa = 1;
// print a.aa here should be 1
method(a);
// here a.aa should be 2


Void method(A a) {
  a.aa =2;
  a = new A();
  a.aa = 3;
}

これは、参照が値として渡されたことを示しています。メソッド内のオブジェクトを変更しても、呼び出し元の参照は変更されません。

1
追加された

私は文字列オブジェクト@ 1ed3afはあなたのオブジェクトのクラス名と@で区切られたハッシュコードで構成されていると思います。これはそれを識別する一意の文字列です。
このトピックを読んで、完全な説明!

0
追加された
@ prap19:これは長さ6の16進数なので、Javaで16 ^ 6の異なるオブジェクトを生成できますか?これは16Mのオブジェクトになります - それほど多くはありません!だからユニークではありません。ユニークは hashcode と矛盾しています。
追加された 著者 user unknown,
はい、私は同意しました、私はそれを確認しました。
追加された 著者 prap19,