當一個變量最為一個參數傳入方法內部的時候,會有兩種不同的傳遞方式:值傳遞和引用傳遞。
值傳遞的特點:不管方法內部對傳進去的參數作任何改變,也不會影響方法外部的變量的值
引用傳遞的特點:方法內部對傳進去的參數作的改變也會影響方法外部的變量的值
那麼哪些是值傳遞,哪些是引用傳遞呢?
基本類型(8種)的傳遞都是值傳遞
引用類型(除String外)都是引用傳遞
Strng比較特殊,它雖然是引用類型,但是卻是值傳遞
通過一下例子來理解:
Student.java
[java]
package com.tianjf;
public class Student {
private String name;
public Student(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
package com.tianjf;
public class Student {
private String name;
public Student(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
Test.java
[java]
package com.tianjf;
public class Test {
private static void changeInt(int i) {
i = 1;
}
private static void changeStudent(Student student) {
student.setName("李四");
}
private static void changeString(String str) {
str = "456";
}
public static void main(String[] args) {
int i = 0;
String str = "123";
Student student = new Student("張三");
System.out.println("Before change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
changeInt(i);
changeStudent(student);
changeString(str);
System.out.println("After change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
}
}
package com.tianjf;
public class Test {
private static void changeInt(int i) {
i = 1;
}
private static void changeStudent(Student student) {
student.setName("李四");
}
private static void changeString(String str) {
str = "456";
}
public static void main(String[] args) {
int i = 0;
String str = "123";
Student student = new Student("張三");
System.out.println("Before change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
changeInt(i);
changeStudent(student);
changeString(str);
System.out.println("After change:\ni:" + i + "\n" + "student:" + student.toString() + "\n" + "str:" + str);
}
}
運行結果: www.aiwalls.com
Before change:
i:0
student:張三
str:123
After change:
i:0
student:李四
str:123
從運行結果可以看出,int和String類型的值經過change方法後沒有變,而student的值變瞭。
作者:tianjf0514