值传递、引用传递

值传递、引用传递

前言:
java喜欢宣传自己没有指针,所以sun管java的指针叫引用(意思为一个对象的引用),所以java的引用(即指针)、c++的引用、术语引用传递就这么混淆了。

参数传递类型
【值传递】java基础数据类型实参值为数值,对象类型实参值为地址,形参则为数值或地址的拷贝,所以java确实只有值传递。
【引用传递】call(pass) by reference,表示形参是实参原始值的引用,相当于别名,与实参使用相同的内存空间,而不是独立内存空间、实参的值的一个拷贝。这时函数中修改了形参变量的值(比如形参类型是对象,值是个地址),实参的值(即那个地址)也会跟着改变。

java所说的引用是指针,并不是c++的引用,也不是引用传递的引用。java完全没有任何引用的概念。这里只讨论值传递的【传数值】和【传地址】两种情况。

龙书截图!盗版惭愧!
在这里插入图片描述
龙书!
java:
基础类型传值
【java取消了基础数据类型的指针操作】
数组传地址
【因为c数组3个维度就能确认内存:首地址 类型长度 元素个数,所以数组传地址是古老的默认实现方式】
字符串传值
【想替代char[] char*,java底层封装了字符串,但半对象半基础类型,和c++的字符串类型一样都是半成品,所以只能死记为传值,效率、定义和值传递逻都很不舒服】
对象传地址
【与c++ new的对象是一样的,只是必须new并且没有星号了而已,像语法糖】
在这里插入图片描述
js:
与java一起记忆就行
在这里插入图片描述
c++:
万恶的c++想传什么就传什么,此处仅为参考java语法由来
1、java取消了基础数据类型的指针
2、因为效率等问题,java保留了new对象的指针,但是隐藏了操作符*
3、java取消了&取址和引用
ps:java数组、map、list有些原始,要是有json语法就好了var j= {},a=[]…
在这里插入图片描述
php:
php数组包含array json map list等功能,相当于基础数据类型,为传值;
但php5对象也是传地址,因为传地址效率高、适用大部分场景、并且对开发人员并不存在理解困难
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值