java 到底是值传递还是引用传递

代码先行,原理后知

后面有图解释证明它是拷贝

这里可能你会疑惑,变回来怎么就能证明入参是拷贝,而不是引用本身,你有这个疑问是因为概念不清!,请看下面的结论和定义。

 

摘抄整理。。。。。。

摘自:原文链接:https://blog.csdn.net/xiaojinlai123/article/details/88678367

定义:

 值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
 引用传递:是指在调用函数时将实际参数的地址直接传递到函数中(的形参),那么在函数中对参数所进行的修改,将影响到实际参                     数。
 引用传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。(下面文章中 C++ 的定义,我                       觉得这样说更精简形象一些,所以放了两个定义,其实意思是一样的)
定义关键1:是指在调用函数时将实际参数的地址直接传递到函数中(给形参了)

 证明:Java 在进行方法调用传递引用类型参数的时候,就是先给形参一个与实参相同的地址的(此处与 C++ 的不同之处是,C++ 是别名,没有在内存中给形参开辟空间,而 Java 给形参开辟了一个栈内存空间,存放与实参相同的引用地址。但是这与引用传递的定义不违背啊!!!定义可没说形参是否有开辟空间的概念)。
 

定义关键2:在函数中对参数所进行的修改,将影响到实际参数。

证明:Java 在进行方法调用传递引用类型参数后,修改形参的内容后,就是影响了实参的值。

结论:

1 就 Java 语言本身来说,只有值传递,没有引用传递。

注意:(在 C++ 中的定义是“引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样”,再看引用其中的一个描述:“声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元”。因此这引用的概念在 Java 中根本不存在。Java 中哪有给变量起个别名的!!!
)

2 根据 值传递,引用传递的定义来说:
        Java 中的基本类型,属于值传递。
        Java 中的引用类型,属于引用传递。
        Java 中的 String 及包装类,属于特殊群体,作为形参时,由于每次赋值都是重新创建了对象,所以形参会指向另一个地              址,因此实参没有变,看起来像值传递。

       但是其特性已经破坏了,值传递、引用传递的定义。因此他们属于引用传递的定义,却表现为值传递!!!(String 表面看似值传递,但是内部是指向了另一个内存地址,当然不会对外面的实参进行更改啦

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值