Java的參數傳遞

Java 不會傳遞地址, 只會傳遞值。
什麼叫傳遞值:

	// 傳遞的是值的拷貝, 不同內存空間, 改變不會影響
1.定義以一個基本數據類型A, 參數傳遞過去,調用者改變這個A值之後不影響我原來的A
	//傳遞的是對對象的應用, 同一個內存空間,改變當然影響
2.定義一個 對象A ,  作爲參數傳遞過去,調用者改變這個對象,原來的A受到影響。

看這倆例子就懂了

  1. 基本數據類型 ,傳遞值的拷貝,前後不影響
    public class TempTest {
        private void test1(int a){
            a = 5;
            System.out.println("test1方法中的a="+a);
        }
        public static void main(String[] args) {
            TempTest t = new TempTest();
            int a = 3;
            t.test1(a);//傳遞後,test1方法對變量值的改變不影響這裏的a
            System.out.println(”main方法中的a=+a);
        }
    }

test1方法中的a=5
main方法中的a=3

  1. 引用數據類型, 傳遞前後指向同一塊地址,前後影響
   public class TempTest {
        private void test1(A a){
            a.age = 20;
            System.out.println("test1方法中的age="+a.age);
        }
        public static void main(String[] args) {
            TempTest t = new TempTest();
            A a = new A();
            a.age = 10;
            t.test1(a);
            System.out.println(”main方法中的age=+a.age);
        }
    }
    class A{
        public int age = 0;
    }

test1方法中的age=20
main方法中的age=20

但是一旦調用者開闢新內存空間, 前後就不影響了

    public class TempTest {
        private void test1(A a){
            a = new A();//新加一行
            a.age = 20;
            System.out.println("test1方法中的age="+a.age);
        }
        public static void main(String[] args) {
            TempTest t = new TempTest();
            A a = new A();
            a.age = 10;
            t.test1(a);
            System.out.println(”main方法中的age=+a.age);
        }
    }
    class A{
        public int age = 0;
    }

test1方法中的age=20
main方法中的age=10

你可以把 基本數據類型 和 初始化過的String 記爲不影響,其他記爲影響

初始化過的String也就是 String s="asd’; 這種的,傳s過去,他改不變原來的s
就這兩種情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章