全てのプログラミング言語にポインタは存在します

C言語を学んでいると必ずポインタという理解しずらい壁にぶつかります。
値の実体を指している変数を 通常の「変数」 とするならば、その変数の参照(指し示している)しているのが 「ポインタ」 ということになります。

/* aという変数に100という数値が格納されている */
 a = 100;

/* aという変数をbが指し示している */
int *b = a;

/* aという変数の値が200に書き換わる */
*b = 200;

他の言語の仕様として、C・C++言語の良さを踏襲しつつも解りずらい仕様を排除し
オブジェクト変数を暗黙にオブジェクトのポインタ変数として使用し、
明示的にポインタ記法を行う必要がなくなった
といことになりますが、例えば java言語にて下記プログラム処理があった場合
MyClass claA の private 変数に存在している id は
200 に変更されます。

MyClass clsA;
clsA = new MyClass();
clsA.setID(100);

MyClass clsB;
claB = clsA;
clsB.setID(200);

これはポインタの振る舞いそのものです。

変数のコピーを行う場合は、「値渡し」あるいは「深いコピー」などと呼びます。
ポインタの振る舞いでは「参照渡し (call by reference)」あるいは「浅いコピー」などと呼びます。

プログラミング言語には「値渡し」と「参照渡し」が存在することを、初学者は必ず押さえておく必要があるでしょう。