8

私はこのウェブサイトだけでなく、プログラミングもまったく初めてなので、何かを台無しにしてしまったら許してください。ここにコードを適切に投稿する方法を考え出すのにかなりの時間を費やしています。

package tester;
import java.util.*;
public class Mainclass2 {
    public static void main(String[] args) {

        int y = 3; 
        int[] x = {1, 2, 3, 4};

        editnumbersArray(x);
        editnumbersNotArray(y);

        System.out.println(x[2]); **//now this was changed from 3 to 9...**
        System.out.println(y);    //but this one went unchanged.

    }

    //this accepts 'x[]' into the 'a[]' parameter.
    public static void editnumbersArray(int[] a){
        a[2] = 9;  **//<---why does this one CHANGE the actual x[2] instead of just a[2]?**
    }

    //this accepts 'y' into the 'a' parameter.
    public static void editnumbersNotArray(int a){
        a = 9;  **//<--while this one only changes 'a' instead of 'y'?**
    }

}

したがって、私の質問は基本的にコメントとしてそこに入力されます。他のメソッドに渡された int が変更されないのに、メソッドに渡された配列が元の配列 (x[]) の値を変更するのはなぜですか? 簡単な答えだと思いますが、調べてみると何を検索すればいいのかわかりませんでした。これが何と呼ばれているのかわからないので、検索したものはすべて間違った方向に導かれました。助けてくれてありがとう!!

編集:住所との類推をありがとう!それはあなたが私に説明できた最高の方法です。基本的に、配列をパラメーターに渡すとき、実際の値ではなく参照を渡しますか? メソッド内で調整を行うと、配列が参照しているものは何でも変更されますか? これはリストでも発生することに気付きました。では、リストは実際には値渡しされていませんか? メソッド内で名前を付けても、基本的に配列/リスト自体が編集のために渡されているようです(この場合は a[] )。

編集 http://javadude.com/articles/passbyvalue.htm このページは本当にそれを片付けました。そして、重複した質問を投稿して申し訳ありません。問題は、何を尋ねようとしているのかわからなかったことです。「値渡し/参照」という用語を聞いたことがなかったので、今では知っています

4

2 に答える 2