2011-04-18 13 views
0

私はJavaを学ぶC++プログラマーです。現在のオブジェクト[array1]内に存在するオブジェクトの配列を取って、それを別の配列[tempArray](C++コードの形式のもの)に置き換えるメソッドで、以下を実行するメソッドでは、java設定array1 = tempArray

$ ... 
$15 private void replaceArray(){ 
$16  // exchanging values tempArray also has been generated in this omitted section 
$17  delete[] array1; 
$18  array1 = tempArray; 
$19 } 
$ ... 

私が実行している問題は、キーワード "delete"が実際にjavaに存在しないということです。だから私の質問は、私だけ行うと...はい、私は知っている(

$ ... 
$15 private void replaceArray(){ 
$16  // exchanging values tempArray also has been generated in this omitted section 
$17  array1 = tempArray; 
$18 } 
$ ... 

は、元の配列1はまだそれにアクセスすることなしポインタで存在するか、それはジャワのマネージドコード環境での世話をされるということですそのポインタはまだ存在しますが、Java仮想マシンはそれらを管理します。プログラマはそれらに触れる権利がありません)?

答えて

2

配列との直接の関連付けは、ポインタを新しい変数にコピーするのと似ています。

tempArrayに別の値を設定して値を変更すると、配列1も変更されます。

しかし、その配列への参照がない場合、JVMはメモリを管理します。

さらに、配列をコピーするより良い方法は、その配列のclone()を作成することです。

+0

clone()[?]がうまくいかない理由は、配列のすべての要素を受け取り、その中間にある可能性があるということです。もはや存在しない情報を検索しないことにつながります。 – gardian06

1

ガベージコレクタはクリーンアップを処理します。これとデストラクタの不足は、おそらくC++からJavaに移行する最も顕著な違いになるでしょう。また、という言葉になる必要があります。オブジェクトはすべてポインタになります。組み込みの単純な型とポインタをスタックに置くことはできません。

1

array1がtempArrayを指した後は、それを以前の値に再割当てすることができなくなります。 (他に何も参照していないと仮定して)array1が最初に指したオブジェクトは、JVMがメモリを解放するためのガベージコレクションを行うまで、メモリ内にまだ存在します。