I have the below code:
public class Main {
public static List<Integer> ODD_NUMBERS = new ArrayList<Integer>();
public static void main(String[] args) {
for(int i =0;i<10;i++)
ODD_NUMBERS.add(2*i+1);
System.out.println("1. oddNumbers: "+String.valueOf(ODD_NUMBERS));
addEvenNumbers(ODD_NUMBERS);
System.out.println("3. oddNumbers: "+String.valueOf(ODD_NUMBERS));
}
private static void addEvenNumbers(List<Integer> listOfNumbers) {
for(int i =0;i<10;i++){
listOfNumbers.add(2*i);
}
System.out.println("2. listOfNumbers: "+String.valueOf(listOfNumbers));
}
}
and the following outputs:
1. oddNumbers: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
2. listOfNumbers: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
3. oddNumbers: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
I have some difficulties in understanding how a static field is changing!!!
Given that I have ODD_NUMBERS as static list of integer numbers which is filled by the odd numbers. But then I send this list as a parameter to the addEvenNumbers method which adds some Even integers into it and the result of the print inside the method is:
listOfNumbers: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
But, when i back to the main() method and print the static variable ODD_NUMBERS then it has the same value as also changed to the below values listOfNumbers like below :
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
The fact that listOfNumbers and ODD_NUMBERS have identical values surprises me, because the value listOfNumbers is a parameter of addEvenNumbers and it must have no effect out of this block of code. Also, the method never returns anythings.
So, my question is:
Is it because the parameter of method (listOfNumbers) is referenced by an static parameter ?
Can you explain how the static variable changes ?