Java中参数传递都是值传递

public class Hello {
    public static void main(String[] args) {
        int a=1;
        System.out.println(a);
        chage(a);
        System.out.println(a);
    }
    public static void chage(int a){
        a=10;
    }
}

输出结果为1
     1

一眼便可以看出来上述是值传递,但是对于对象却是略有不同

 1 package com.zhang.firstday;
 2 public class Hello {
 3     public static void main(String[] args) {
 4         Student student = new Student("张三");
 5         System.out.println(student.name);
 6         change(student);
 7         System.out.println(student.name);
 8     }
 9     public static void change(Student a){
10         a.name="李四";
11     }
12 }
13 class Student{
14     String name;
15 
16     public Student(String name){
17         this.name=name;
18     }
19 }

输出结果为:张三

      李四

可能你会说,这明显是引用传递啊,别急

 1 package com.zhang.firstday;
 2 public class Hello {
 3     public static void main(String[] args) {
 4         Student student = new Student("张三");
 5         System.out.println(student.name);
 6         change(student);
 7         System.out.println(student.name);
 8     }
 9     public static void change(Student a){
10         a=new Student("李四");//改了这里
11 //        a.name="李四";
12     }
13 }
14 class Student{
15     String name;
16 
17     public Student(String name){
18         this.name=name;
19     }
20 }

这下输出又是张三

      张三

到底为什么呢?

说Java都是值传递,是因为每次new了一个对象都是栈中存储对象的指针,对象实际存储在堆中

而传递对象则是将栈的地址传递给形式参数

猜你喜欢

转载自www.cnblogs.com/greenofyu/p/13399921.html