java傳參方式
阿新 • • 發佈:2018-12-29
java傳參分兩種型別,java都是值傳遞
1.基本型別使用值傳遞,形參是對實參的一個拷貝,在方法裡對形參修改不影響實參的值
2.引用型別是引用值傳遞,對於類的例項它傳遞的是類的引用,形參是對實參的引用值得拷貝,形參可實參指向的是同一個物件地址
例子
public class testchuancan { public static void main(String[] args) { // 引用值傳遞 MyClass myClass = new MyClass(); StringBuffer buffer_real = new StringBuffer("hello"); myClass.changeValue(buffer_real); System.out.println(buffer_real.toString()); // 基本型別值傳遞 int k = 1; myClass.changeBaseVar(k); System.out.println("changeBaseVar外部非static" + k); } } class MyClass { void changeValue(StringBuffer buffer_formal) {// 對引用變數,傳參是引用值傳遞 buffer_formal.append("world");// 形參buffer_formal和實參buffer_real指向的同一塊記憶體 System.out.println("changeValue內部:" + buffer_formal.toString()); buffer_formal = new StringBuffer("1111");// 形參buffer指向了新的引用,不影響實參的值 System.out.println("changeValue內部:" + buffer_formal.toString()); } void changeBaseVar(int i) {// 基本型別直接拷貝值傳遞 i++; System.out.println("changeBaseVar內部" + i); } }
另外一個例子說明物件傳遞也是值傳遞
public class testobjchuanzhi { public static void main(String args[]) { Student s1 = new Student("ACE"); Student s2 = new Student("SABO"); swap(s1, s2); s1.pn("swap方法外,s1_fomal"); s2.pn("swap方法外,s2_fomal"); } public static void swap(Student s1_fomal, Student s2_fomal) { // 使用形參操作真實物件 s1_fomal.modiName("lufei"); s1_fomal.pn("交換之前swap方法內,修改名字的s1_fomal"); // s1_fomal s2_fomal 傳遞的是 s1 s2的引用值拷貝 // s1和s1_fomal指向的是同一個物件。s2和s2_fomal指向的是同一個物件。交換fomal不影響real,但s1_fomal可以操作物件 Student temp = s1_fomal; s1_fomal = s2_fomal; s2_fomal = temp; // s1_fomal s2 _fomal形參使用之後就被丟棄 s1_fomal.pn("交換之後swap方法內,s1_fomal"); s2_fomal.pn("交換之後swap方法內,s2_fomal"); } } class Student { String name; int age; public Student(String var) { this.name = var; } public void pn(String temp) { System.out.println(temp + ":" + name); } public void modiName(String var) { name = var; } }
結果:
交換之前swap方法內,修改名字的s1_fomal:lufei
交換之後swap方法內,s1_fomal:SABO
交換之後swap方法內,s2_fomal:lufei
swap方法外,s1_fomal:lufei
swap方法外,s2_fomal:SABO