既に素敵な回答が他の方から出てますので蛇足で。
配列変数以外にも、
意識しないといけない点があるので順番に説明します。
先ずそれぞれのメソッドがやっている事を確認しましょう。
Java
1 static void swap(int[] a) {
2 int x=a[0]; a[0]=a[1]; a[1]=x;
3 }
上記がやっている事ですが、
引数で受け取った配列の各要素の数値を入れ替えた上で配列に設定し直しています。
これは質問者さんの想定通りですので特に問題ないですね。
Java
1 static void swapVal(int x, int y) {
2 int w=x; x=y; y=w;
3 }
上記は呼び出し元から値をコピーして受け取った数値を、当該メソッドのローカル変数で入れ替えています。
つまりやってることが全然違っていたりします。
ついでなので上記に出てきた値渡し、ローカル変数についても説明します。
###値をコピーして受け取るとは
int型やdouble型などの基本データ型を引数として受け取るとこの挙動となります。
今回のケースだとswapValメソッドには配列bの各要素の数値がコピーされた状態となり、この時点で元々のb配列との関連は一切なくなっています。
これは**値渡し(call by value)**とも呼ばれます。
また値渡しと関連するもので**参照渡し(call by reference)**というものも存在します。
厳密には違うものですがswapメソッドの方がちょうどそれに近い振る舞いをします(配列は参照型データ)。
この辺りは最初につまづきやすい所なので以下のリンクなどで目を通してしておくと良いでしょう。
【Java初心者】値渡しと参照渡し
###ローカル変数とは
ローカル変数とは宣言されたブロックでのみ有効となる変数の事です。
上記のコードだとswapValメソッド内で宣言されたint型の変数たちは、
このメソッド内でしか有効となりません。
もう一つ例を挙げると、
Java
1if (条件) {
2 int i = 10;
3}
4// i = 0; ifブロック内で宣言されているためそもそもコンパイルエラー
上記の変数iはifブロック内でのみしか有効となりません。
こういう有効範囲の事を変数のスコープとか言ったりします。
ローカル変数と対になる用語としてグローバル変数というのもあります。
興味あったら調べてみると良いと思います。
・最後に
色々覚える事も多くて大変かと思いますが、
一つずつ確実に吸収していく事がプログラミング向上の近道です。
頑張ってくださいね^^
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。