本文共 3135 字,大约阅读时间需要 10 分钟。
参数类型
值传递和引用传递
我们可以看一下代码:
public static void main(String[] args) { String nameString = "张三"; name(nameString); System.out.println("main--->"+nameString); } public static void name(String name) { name = "李四"; System.out.println("name--->"+name); }
这一次拷贝的是nameString 值"张三",name的值就是张三,所以当name的值不管怎么变化,nameString是不变的。
------------------------------------------------------------------------------------------------------------------------
那我们来看一下这个
public class Person { private String nameString; private int age; public Person(String nameString,int age) { this.age = age; this.nameString = nameString; } @Override public String toString() { return "Person [nameString=" + nameString + ", age=" + age + "]"; } public static void name(Person person) { person.age =20; person.nameString="李四"; } public static void main(String[] args) { Person person = new Person("张三",18); System.out.println(person.toString()); //参数改变前 name(person); System.out.println(person.toString()); // 参数改变后 } }
输出答案
Person [nameString=张三, age=18]Person [nameString=李四, age=20]
这一次我们也是拷贝的是一个副本,拷贝的是person对象的副本,拷贝过来的对象和原对象指向同一内存的存储空间,所以当(person -- 拷贝)改变值的时候原person也改变值。
我们知道其实在栈内存当中原person里面存贮着堆内存当中的Person类的内存地址,而java在这里传输的是原person的存贮着的地址值
结论:java 只有值传递
public class Student { private String name; private int age; public Student(String name,int age) { this.name = name; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } public static Student change(Student s1, Student s2){ Student temp = new Student("王五",20); temp = s1; s1 = s2; s2 = temp; return temp; } public static void main(String[] args) { Student zhangsan = new Student("张三", 18); Student lisi = new Student("李四", 20); Student tStudent = Student.change(zhangsan, lisi); System.out.println(zhangsan.toString()); System.out.println(lisi.toString()); } }
Student [name=张三, age=18]Student [name=李四, age=20]
--------------------------------------------------------------------------------------------------------------------------
public class Student { private String name; private int age; public Student(String name,int age) { this.name = name; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } public static void change(Student s1, Student s2){ Student temp = new Student("王五",20); temp.name = s1.name; s1.name = s2.name; s2.name = temp.name; } public static void main(String[] args) { Student zhangsan = new Student("张三", 18); Student lisi = new Student("李四", 20); Student.change(zhangsan, lisi); System.out.println(zhangsan.toString()); System.out.println(lisi.toString()); } }
Student [name=李四, age=18] Student [name=张三, age=20]
转载地址:http://rcyki.baihongyu.com/