Java ではポインターを使用できないと読みました。ただし、C++ の「This」ポインターは「This」キーワードに置き換えられます。だから誰かがJavaの動的メモリ割り当てとポインタの置換について説明できますか
7 に答える
Javaにはポインターがありません。Java は参照を処理します。
Java には動的メモリ割り当ての概念はありません。したがってmalloc/calloc
、Javaには代替手段はありません。JVM は、オブジェクトのメモリの作成と解放を処理します。JVM にはガベージ コレクションの機能が組み込まれているため、それに代わるものfree
も提供されていません。
内部的には、オブジェクトへの参照はポインターとして実装されます。Java には、関数ポインターの代わりに使用できる匿名の内部クラスがあります。
2.2.9 もうポインターはありません
ほとんどの研究は、ポインターがプログラマーがコードにバグを挿入することを可能にする主要な機能の 1 つであることに同意しています。構造体がなくなり、配列と文字列がオブジェクトであることを考えると、これらの構造体へのポインターは不要になります。したがって、Java にはポインタ データ型がありません。C で配列、構造体、およびポインターを必要とするタスクは、オブジェクトおよびオブジェクトの配列を宣言することによって、より簡単かつ確実に実行できます。配列ポインターでの複雑なポインター操作の代わりに、算術インデックスによって配列にアクセスします。Java ランタイム システムは、すべての配列インデックスをチェックして、インデックスが配列の境界内にあることを確認します。
このスレッドをチェックしてください
Java の参照はポインターではありません。Java では、参照を使用してポインター演算を行うことはできません。
ここでErik Demain による包括的な分析を読むことができますC to Java: Converting Pointers into References
。
Java でのアンマネージ ポインターの「置換」はマネージ参照です。
両者の違いについては、プログラマー フォーラムのこの回答を参照してください。
Nothing. Java does not have a concept that is equivalent to Pointers.
Java は参照を使用して、変数の初期化、設定、取得などを行います。C++ では、ポインタは基本的にその変数のメモリへの参照です。したがって、ここでの各宣言は Java での参照であり、これは C++ のポインターと同等ですが、内部的にはプログラマーではなく JVM によって処理されます。Java はこれを内部的に処理します。前に c++ のようなポインターはありません。
Java はポインターを使用します。「オブジェクト参照」として処理されます。たとえば、次のようになります。
String str = new String("efi");
// str is NOT the string object.
// It is a reference to the String object.
違いは、Java がこれを行い、自分で行うことはできないことです。C++を使用すると、それらを管理できます。