Вопрос по java – Являются ли локальные переменные в статических методах также статическими?
===========================================================================================

Мне интересно, все ли локальные переменные становятся статическими, если мы объявляем их статическим методом?

например:

```
  public static void A(){
        int x [] = {3,2};
        changeX(x);

        for (int i = 0; i< x.length; i++){
             System.out.println(x[i]);   // this will print -1 and 1
        }
  }
  private static void changeX(int[] x){
        x[0] = -1;
        x[1] =  1;
  }

```

Насколько я понимаю, Java всегда передается по значению, но почему состояние X изменилось после того, как мы сделали вызов changeX? Кто-нибудь может объяснить это, пожалуйста? и кто-нибудь может объяснить, как Java имеет дело со статическими переменными с точки зрения распределения памяти? и что произойдет, если мы передадим статическую переменную в функцию в качестве параметра (я знаю, что люди обычно этого не делают)

 называемой «постоянная генерация».

Локальные переменные, исключенные в статическом методе, не имеют никакого значения с теми, которые объявлены в нестатическом методе. Ссылки на объекты и примитивные переменные помещаются в стек. Когда вы создаете объект, хранилище выделяется в куче при выполнении этого кода.



 переменные, которые являются локальными для МЕТОДА, такие же, как и любая другая переменная, объявленная в любом другом методе - они динамически распределяются и могут быть освобождены, когда метод возвращает переменную, которая больше не видна.

Однако, если вам нужны статические переменные, вы должны объявить их вне методов, как обычные статические переменные для класса. Если по соглашению вы оставляете их в покое, за исключением случаев, когда они находятся внутри этого конкретного метода, они имеют такой же эффект, как если бы они были статическими и локальными для метода. Просто не забудьте добавить комментарии на этот счет.



 как и у любой другой переменной.

Локальные переменные в статических методах - это просто локальные переменные в статическом методе. Они не являются статичными, и они ни в коем случае не являются особенными.

статическийvariables хранятся в памяти прилагается к соответствующему`Class` объекты; любые объекты, на которые ссылаются статические ссылочные переменные, просто живут в обычной куче.

Когда вы передаете статическую переменную методу в качестве аргумента ... абсолютно ничего интересного не происходит.

Regarding the scenario in your code:

Imagine that you have a toy balloon on a string (the balloon is your array object, and the string is the reference to it declared in `A()`.)
Now you tie another string on to the balloon and hand that string to a friend (that's exactly what happens when you call the `changeX()` method: the string is the parameter of the method, and it points to the same object.)
Next, your friend pulls in the string, takes a black marker and draws a face on the balloon (this is like the `changeX()` method modifying the array).
Then your friend unties his string, leaving just your string attached to the balloon (the method returns, and the local variable in `changeX()` goes out of scope.)
Finally you reel in the string and look at the balloon: of course, you see the face (your `A()` routine sees the changed array.)
Это действительно так просто!