1.方法的值传递
值传递:在方法里面修改变量的值,不会影响到方法外,作用域仅在方法里面
package Hello;
public class Person {
public void speak(int age){
System.out.println("我今年"+age+"岁了");
age=20;
System.out.println("在方法里修改的年龄:"+age);
}
public static void main(String[] args) {
Person person=new Person();
person.speak(18);
int age=22;
System.out.println("在方法外修改的年龄:"+age);
}
}
其结果:
可以看到当age已经从18改为20时,结果仍输出为18,因此值传递并不会影响到方法外的值;
2.方法的引用传递
引用传递:传递的是地址,对象里的属性在方法里值修改,对外面有影响,我们通过对象.属性可以获取到最新的数据;
package Hello;
public class Person2 {
int age=20;
public void speak(Person2 person){
System.out.println("age="+age);
//将年龄修改为40
person.age=40;
}
public static void main(String[] args) {
Person2 person1=new Person2();
//未修改之前的的年龄
person1.speak(person1);
//用引用传递修改之后的年龄
person1.speak(person1);
}
}
结果为:
可以看到在方法里面将年龄修改之后,此时传递给堆里面的地址其实已经发生了变化,自然输出的值也发生了变化