>>705
基本的に、returnで返される値は呼び出し元に戻るまで、
参照が維持されているから、GCの対象にはならないよ。
言語仕様を見てくれ。

>>706
Javaでは、複製は自分で実装することになっている。
基本的に、Cloneableをimplementsして、
clone()をオーバライドするわけだが、super.clone()で
すむと思っているヤシもいるようだけど、
そのオブジェクト固有のフィールドは自前で複製を
作る必要がある。その際、浅いコピーにするか、
深いコピーにするかちゃんと考える必要がある。
フィールドがStringとか値が書き換わらないオブジェクトなら、
浅いコピーで十分だが、setterで値が変更されてしまうような
フィールドは、影響度を検討して、深いコピーにするかどうかを
決める必要がある。

>>709
同じ値として扱うことも可能だよ。
その場合、equals()とhashCode()をオーバライドすることになる。
そのような例としては、Stringなどが代表的だね。