【初心者】Java質問・相談スレッド82【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0862デフォルトの名無しさん
2006/03/13(月) 02:42:22世の中のCの本で「参照を渡すから参照渡し」とか書いてるのは、バカが書いたんで
あって全部間違い。Cには値渡ししかないってのが言語仕様だしカーニハンに聞こうが
リッチーに聞こうがそう言う。
参照渡しというのはVBのByRefとか、Pascalのデフォルト動作をいうの。
String hoge = "hoge";
func( hoge);
System.out.println( hoge);
void func( String arg) {
//なんか処理
}
参照渡しでは、hogeとargは完全に同一の変数として扱われる。だからfunc内でarg="nullpo"と
やると、argはもちろん、hogeの値も「nullpo」になる。イメージとして変数を考えると、変数を渡すと、
変数がもってる値じゃなくて、変数という参照自体が渡ってるような感じなので「参照渡し」という。
一方で、変数の値が渡るのが「値渡し」。
CとかJavaは値渡しだから、func( hoge)としたときには、hoge変数のもつ値(この場合は
String参照。C言語だったらポインタ)が、hoge変数とはまったく関係ない、argというまったく別の
変数に格納される。
argはhogeとは別の変数だからarg="nullpo"とかやろうが、hogeには関係ない。
これが値渡し。CにもJavaにも昔からこの方式しかない。
参照渡しが死滅した方式なら別に参照の値渡しを参照渡しと呼んだっていいが、未だに
VBなんかでも普通に使ってるんだから、ちゃんと区別しないと今みたいに恥ずかしい目にあう
ってことだ。
■ このスレッドは過去ログ倉庫に格納されています