问题讨论贴 欢迎指正
遇疑
//值传递
public class Demo01 {
public static void main(String[] args){
int a = 1;
System.out.println(a);// 1
Demo04.change(a);//此刻使用change方法,将10赋值给
System.out.println(a);//1
}
public static void change(int a){
a = 10;
}//该方法返回值类型为空
}
//引用传递:对象,本质还是值传递
public class Demo02 {
public static void main(String[] args){
Person person = new Person();
System.out.println(person.name);// null
Demo04.change(person);//此刻使用change方法,将10赋值给
System.out.println(person.name);//Peter
}
public static void change(Person person){
person.name = "Peter"
}
}
上述两段代码语句大体相同,但使用change方法后输出结果却与预期有差别
总结反思:
第一段代码,public static void change(int a){a = 10;}方法中的int a其本质为形式参数,main方法中调用该方法确实起到了对形参a进行赋值10的操作,但是该方法的返回值类型为void,即该形式参数并未输出,仅在change方法内有值10,在主方法中并未输出,故而System.out.println(a)输出的a的值仍为1;
第二段代码与第一段代码的差别在于,第一段代码change方法中形参为int类型,而第二段代码change方法中形参为Person类,且该方法改变的是Person类中的name变量,这里的name其本质为指针,可以理解为一个容器,通过change(Person person)方法对name容器进行填充,因为指针唯一,所以在后段 System.out.println()语句输出结果为Peter。
若分析有误,亦或有跟清晰明确的思想,欢迎指正~
浙公网安备 33010602011771号