问题讨论贴 欢迎指正

遇疑

//值传递
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。

若分析有误,亦或有跟清晰明确的思想,欢迎指正~

posted @ 2020-11-17 15:03  何安生  阅读(73)  评论(0)    收藏  举报