Java方法传参机制

目录

Java方法传参机制

基本数据类型的传参机制

引用数据类型的传参机制


Java方法传参机制

基本数据类型的传参机制

  • 如果方法中的形参是基本数据类型,则是值传递,形参的改变不影响实参。

  • 每创建一个新的方法就会开辟一个新的栈空间存放。

public class Demo02 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        AA aa = new AA();
        aa.swap(a,b);
        System.out.println("a="+a+"\tb="+b);
    }
}
class AA {
    public void swap(int a,int b) { //此a、b非彼a、b,它们的作用域不同(在不同的栈空间),不发生冲突。
        System.out.println("a和b交换前的值:a="+a+"\tb="+b);
        int tmp = a;
        a = b;
        b = tmp;
        System.out.println("a和b交换后的值:a="+a+"\tb="+b);
    }
}

引用数据类型的传参机制

  • 如果方法中的形参是引用数据类型,则是地址值传递,形参的改变会影响实参。

  • 数组和对象作为形参,都属于引用数据类型,存放在堆中。

数组作为形参:

public class Demo03 {
    public static void main(String[] args) {
        B b = new B();
        int[] arr = {1,2,3};
        b.test(arr);
        System.out.println("main的arr数组");
        for (int i = 0; i <arr.length ; i++) {
            System.out.print(arr[i]+"\t");
        }
        System.out.println();
    }
}
class B {
    public void test(int[] arr) {
        arr[0] = 200;
        System.out.println("test的arr数组");
        for (int i = 0; i <arr.length ; i++) {
            System.out.print(arr[i]+"\t");
        }
        System.out.println();
    }
}

对象作为形参:

public class Demo04 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "jack";
        p.age = 10;
        System.out.println("main前的p.age="+p.age);
        C c = new C();
        c.test(p);
        System.out.println("main后的p.age="+p.age);
    }
}
class Person {
    String name;
    int age;
}
class C {
    public void test(Person p) {
        p.age = 10000;
    }
}

将语句p.age = 10000; 改为 p.age = null;

public class Demo04 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "jack";
        p.age = 10;
        C c = new C();
        System.out.println("main前的p.age="+p.age);;
        c.test(p);
        System.out.println("main后的p.age="+p.age);
    }
}
class Person {
    String name;
    int age;
}
class C {
    public void test(Person p) {
        p = null;
    }
}

创建了一个新的对象,在堆中开辟了新的空间,p指向新的地址

public class Demo04 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "jack";
        p.age = 10;
        C c = new C();
        System.out.println("main前的p.age="+p.age);;
        c.test(p);
        System.out.println("main后的p.age="+p.age);
    }
}
class Person {
    String name;
    int age;
}
class C {
    public void test(Person p) {
        p = new Person();//创建了一个新的对象,在堆中开辟了新的空间,p指向新的地址
        p.name = "tom";
        p.age = 99;
    }
}

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值