static final ArrayListを定義し、変更するために他のクラスに送信しました。しかし、私の例のintのように、彼は最終的なので、2番目のクラスでのみローカルに変更する必要があります。なぜMainクラスでもそれが変更されていますか?最終静的arraylist関数で変更されました
小さなコード例:
public class Main {
private static final ArrayList<String> myList = new ArrayList<>(Arrays.asList("One", "Two"));
private static final int num = 5;
public static void main(String[] args) {
SecondClass second = new SecondClass(myList,num);
System.out.println("List in Main: "+myList.get(0));
System.out.println("Num in Main: "+num);
}
}
public class SecondClass {
public SecondClass(ArrayList<String> list, int num)
{
list.set(0,"Three");
num = 10;
System.out.println("List in second: "+list.get(0));
System.out.println("Num in Second: "+num);
}
}
マイ出力:私はそれがあることが予想何
List in second: Three
Num in Second: 10
List in Main: Three
Num in Main: 5
:
List in second: Three
Num in Second: 10
List in Main: One
Num in Main: 5
「Num in Second」は、パラメータ参照にバインドされたローカル変数であり、他のクラスによって設定された静的変数ではありません。一方、リストはオブジェクト参照であり、同じです –
練習として、 'SecondClass(ArrayList list、final Integer num)'を試してください。 –