Я предполагаю, что ты имеешь в виду перемещать переменную из-за ссылки несмотря на то, что посылаешь другому локальную переменную одного метода. Например:
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, это благодаря тому, что не осуществляется копия объекта, но проходит Ваша ссылка, изменив объект внутри, если отражается изменение. Однако, важно ощущаться, что, изменив ссылку и указав на новый объект, первоначальная ссылка не изменится.
Отвечая на твой вопрос:
Старался подтверждать примерами и подробно описывать в 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
"Правило" параметров (он не существует, только что изобрело это мне) дело в том, что, любая вещь, которую ты мог бы перемещать как параметр, может сходить за параметр в призыве к другой функции, он представляет следующий блок:
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;
}
То, что оставляет нам выражение, что функции, которые возвращали бы тот же тип информации, что и определенный параметр и глобальные и локальные переменные того же типа, могут быть перемещенными как параметр функции.
Я надеюсь, что он помог тебе!