JAVA值传递还是引用传递?

本文详细解析了Java中的参数传递机制。对于基本数据类型,Java采用值传递,传递的是变量的副本;而对于引用类型,传递的是对象在内存地址的副本。在函数内部对引用类型的参数修改会影响原始对象。实参是调用函数时提供的值,形参是函数定义时的占位符。值传递不会影响实参,而引用传递则可能改变实参。举例说明了基本数据类型和引用类型赋值的区别,并探讨了变量和对象在内存中的变化。
摘要由CSDN通过智能技术生成

结论:java是值传递,只是,

  • 对于基本数据类型,传递的是基本类型的量值的拷贝
  • 对于引用类型,传递的是该引用所指向的对象在内存中的地址值的拷贝

实参和形参

    public static void test(String s){
        System.out.println(s);
    }
    public static void main(String[] args) {
        test("sofia");
    }

代码块中 s 是形参,main方法中的“sofia”是实参,即

  • 实参:函数在调用其他函数时,在被调函数后面的括号中的参数为实参
  • 形参:在定义函数时使用的参数

值传递和引用传递

  • 值传递: 在调用函数的时候,将实参复制一份之后传递到函数中,在函数中对参数修改,不会修改到实参
  • 引用传递:在调用函数的时候,将实参的地址传到函数中,函数中的修改会改变实参
    总而言之,是否是值传递,关键在于是否会创建副本(不论是对基本数据类型中的变量创建副本,还是对引用类型中对象的地址创建副本),只要创建了副本就是 值传递

例如

int a = 1;
a = 2
System.out.println(a);  //  2
String str = "xiao";
str = "sofia";
System.out.println(str);  //  xue 
  • 对于基本数据类型而言,变量值就保存在变量中
  • 赋值符号“=”,会直接改变基本数据类型的变量a的值由1变为2
  • 赋值符号“=”,会改变引用类型指向内存中的地址(一开始str的值是对象“xiao”在内存中的地址,赋值后str的值是“sofia”在内存中地址并将“xiao”在内存中的地址覆盖掉,但对象“xiao”的值并未发生改变,且未被引用,而没有任何引用的 “xiao”则成为了垃圾,会被垃圾回收机制回收)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值