Параметры, локальная переменная в методе?

Здравствуйте, друзья, извините вопрос в Java, который я изучаю:

И мне интересно, да?

Можно ли передать локальную переменную из одного метода в другой метод?

Я новичок в методах Java

-1
задан 11.10.2016, 21:44
3 ответа

Я предполагаю, что ты имеешь в виду перемещать переменную из-за ссылки несмотря на то, что посылаешь другому локальную переменную одного метода. Например:

public void valor(int num){
   num += 1;
}

Выполнив функцию стоимость с main и потом напечатав изменчивая номер наблюдается, что Ваша стоимость не изменилась. Это благодаря тому, что примитивные типы информации (int, char, double, и т.д.) не проходят через функцию, но производится копия, которая существует в scope той же самой. Следовательно для примитивной стоимости не возможно перемещать "переменную", но да Ваша стоимость. С объектами он отличный, например:

public class Test{

    static class Foo{
        int a;
        public Foo(int a){
            this.a = a;
        }
    }

    public static void f(Foo foo){
        foo.a = 10;
    }
    public static void main(String args[]){
        Foo foo = new Foo(1);
        System.out.println(foo.a);
        f(foo);
        System.out.println(foo.a);
    }
}

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

1
ответ дан 24.11.2019, 13:08

Отвечая на твой вопрос:

  • , Когда ты "перемещаешь" переменную одного ОБЪЕКТА в mГ©todo, всегда ты перемещаешь ссылку в Г©ste, но не перемещаешь объект в sГ-.
  • , Когда ты "перемещаешь" переменную типа примитивной информации, всегда ты создаешь копию этого.

Старался подтверждать примерами и подробно описывать в cГіdigo. Я надеюсь, что он подает тебя.

, Если ты это скроллируешь tendrГ-туз:

    Valor A: Este es mi valor A
    Valor B: Este es mi valor B
    Valor A: Otro valor A
    Valor B: Otro valor B
    9
    8
    9

CГіdigo:

    public class PasandoVariables{
            private String valorA;
            private String valorB;

            //Asigna valor a A
            public void setValorA(String valorA){
                    this.valorA=valorA;//Uso de this para evitar confusiones
            }
            //Asigna valor a B
            public void setValorB(String otroValorB){
                    valorB=otroValorB;
            }

            //Simple impresion de valores actuales del objeto PasandoVariables
            private void imprimeValores(){
                    System.out.println("Valor A: "+valorA);
                    System.out.println("Valor B: "+valorB);
            }

            //Aqui inicia todo
            public static void main(String[] args){
                    //Aqui crea un objeto en memoria y lo asigna a la variable pv
                    PasandoVariables pv = new PasandoVariables();

                    //Aqui paso el objeto al metodo estatico, donde pv es mi "variable local"
                    actualiza(pv);

                    pv.imprimeValores();

                    //Cambio los valores para confirmar que es el mismo objeto
                    pv.setValorA("Otro valor A");
                    pv.setValorB("Otro valor B");

                    pv.imprimeValores();

                    //Creando variable primitiva
                    int variablePrimitiva = 9;

                    //Imprime valor actual
                    System.out.println(variablePrimitiva);

                    //Paso la variable primitiva
                    actualiza(variablePrimitiva);

                    //No afecto el valor final, porque el metodo anteior creo una copia
                    //Esto solo pasa con datos primitivos, no con objetos
                    System.out.println(variablePrimitiva);
            }

            //Este metodo "sabe" cual es el objeto a modificar, porque tiene la referencia del metodo main
            public static void actualiza(PasandoVariables pv){
                    pv.setValorA("Este es mi valor A");
                    pv.setValorB("Este es mi valor B");
            }

            //Se genera una copia del dato primitivo
            public static void actualiza(int variablePrimitiva){
                    variablePrimitiva = 8;
                    //Imprime el valor actual, para que confirmes que se cambio localmente
                    System.out.println(variablePrimitiva);
            }
    }

PD: я sentГ - extraГ±o отвечая в espaГ±ol :p

1
ответ дан 24.11.2019, 13:08

"Правило" параметров (он не существует, только что изобрело это мне) дело в том, что, любая вещь, которую ты мог бы перемещать как параметр, может сходить за параметр в призыве к другой функции, он представляет следующий блок:

int Suma10(int x) {
    return x + 10;
}

И что у тебя есть следующая функция с локальной переменной:

int Algo() {
    int n = 4; // Variable local n

    if (n >= 4) 
        n = Suma10(n); // El valor de n ahora es 14.

    n = Suma10(Suma10(n)); // Es igual a 14 + 10 + 10 = 34

    return n;
}

То, что оставляет нам выражение, что функции, которые возвращали бы тот же тип информации, что и определенный параметр и глобальные и локальные переменные того же типа, могут быть перемещенными как параметр функции.

Я надеюсь, что он помог тебе!

0
ответ дан 24.11.2019, 13:08