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

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

например:

  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 имеет дело со статическими переменными с точки зрения распределения памяти? и что произойдет, если мы передадим статическую переменную в функцию в качестве параметра (я знаю, что люди обычно этого не делают)

 Hot Licks18 мая 2012 г., 05:08
Вы перепутали здесь пять различных концепций.
 Subs18 мая 2012 г., 04:21
Это локальная или временная переменная. После того, как функция закончена, она не имеет смысла.
 Hovercraft Full Of Eels18 мая 2012 г., 04:18
Это не имеет смысла, так как static не имеет значения для локальных переменных. Они являются локальными, точка, будь то статический метод или метод экземпляра.
 Don Li18 мая 2012 г., 04:32
Массив является объектом в Java. Ссылка на массив передается в changeX при его вызове, поэтому его элементы в массиве могут быть изменены внутри changeX.

Ответы на вопрос(3)

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

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

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

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

Решение Вопроса

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

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

статический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.)

Это действительно так просто!

 18 мая 2012 г., 04:26
Это передача по значению, но для ссылочных переменных значением является сама ссылка.
 peter18 мая 2012 г., 04:25
но я думал, что Java всегда передается по значению
 peter18 мая 2012 г., 04:23
Можете ли вы объяснить приведенный выше код, почему состояние X изменилось после вызова этой функции?
 18 мая 2012 г., 04:24
@ user1389813: это не имеет ничего общего сstatic и все это связано с пониманием ссылочных переменных. Пожалуйста, прочитайте, что Java-ранчо говорит о переменных.
 18 мая 2012 г., 04:50
@ user1389813 - Я добавил раздел в конце своего ответа, чтобы объяснить поведение вашего кода. Это на самом деле очень просто - не переоценивайте это.

Ваш ответ на вопрос