java传参机制(基本数据类型 VS 引用类型)

大家好,我是教授.F

基本数据类型和引用类型的传参机制是不同的,前者传递的是值(值拷贝),不会影响实参:后者传递的是地址,会影响实参的值。

本质上,区别就在于在堆创建还是在栈创建内存。

基本数据类型的内存只在栈中,引用数据类型在堆中有地址。

实例:

public class MethodParameter01{
    public static void main(String[] args){
        int a = 10;
        int b = 20;
        AA  object = new AA();//执行完在堆有一个地址
        object.swap(a,b); //产生新栈
        System.out.println("a=" + a + "b=" + b); 
    }
}
class AA{
    public void swap(int a,int b){
    System.out.println("\na和b交换前的值\na=" + a + "\tb=" + b);
    int temp = a;
    a = b;
    b = temp;
    System.out.println("\na和b交换后的值\na=" + a + "\tb=" + b);
     }
}

main栈先创建成功,基本数据类型,就会直接在main方法中有地址,然后new AA类出来,在堆中直接创建地址。执行object.swap(a,b); 语句后,会产生一个于main方法没有交际的栈,用来存放

int a、int b 和 int temp 的值。因为swap的栈于main方法的栈不同,所以a与b改变之后并不会改变main中的值。所以基本数据类型不会影响到实参的值。

补充:在 Java 中,栈内存主要用于存储方法调用和局部变量。当你在方法中声明一个局部变量时,该变量的值会被存储在栈内存中。这些局部变量可以是基本数据类型(如int、float、boolean等)或者对象引用。

 对于引用类型创建,创建时在堆中会有地址。

就算调用类中的方法,产生的栈存放的也只是指向堆中的地址。

实例:

用类型传递的是地址(传递也是值但是值是地址),可以通过形参影响实参
类也是引用类型
public class MethodParameter02{
    public static void main(String[] args){
        B b = new B();//在堆创建一个对象
        int[] arr = {1,2,3};//一引用型类型,在堆有空间
        b.text100(arr);  
        System.out.println("main中的数组");
        for(int i = 0;i < arr.length;i++){
            System.out.prinit(arr[i] + "\t");        
        }          
    }
}
class B{//这里的arr也指向堆中的arr地址
    public void text100(int[] arr){
        arr[0] = 200; 
        System.out.println("text100中的数组");   
        for(int i = 0;i < arr.length;i++){
            System.out.prinit(arr[i] + "\t");        
        }
    }
}

与基本数据类型的区别在于在栈中产生的地址,存放的是 指向 引用类型在堆中的地址。如下图:

 所以引用类型在栈中产生的内存只是指向堆中的地址。因为改变的是堆中的数据,又因为main中的数据指向的堆中的数据,所以数据的交换会影响到实参。

注意:类也是引用类型。此外,当栈没有使用时,会自动销毁。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值