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了一个对象都是栈中存储对象的指针,对象实际存储在堆中
而传递对象则是将栈的地址传递给形式参数