博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的形参为引用类型的问题
阅读量:1870 次
发布时间:2019-04-26

本文共 1098 字,大约阅读时间需要 3 分钟。

前几天课堂上的一个程序,看了好久始终还是没明白,课堂上老师也测试了很多,今天有时间看,我也来了几个程序测试了一下,但是然而没有发现什么不对,后面只能依靠百度了落,也查了比较久吧,终于还是明白了,今天总结一下。

总结:关于java中的形参问题我总结的就是一句话,在原地址上改动那么则成功改动,否则失败,这个与c里面的类似,c语言中只有当传递以指针形式的时候(也就是传递地址的时候)才能成功修改实参,如果是传递值则不能修改成功,因为作用域的问题,关于c语言的形参是否可以改变实参可以看我之前的那篇博客,
链接;;
现在还是回到java吧,对学过c的也学过java的应该总有种感觉,
认为java中的引用于c语言的指针,几乎是个一样的东西,因为引用是就是保存对象地址的,只能通过引用才能访问到对象,
而c语言;指针就是指向一块内存单元的,可以通过指针来修改这个值。是不是十分类似;
但是我要说的是。语法上应该是没区别的,但是在使用的时候要注意它的变化,它其实也只是一个存放于栈中的基础类型;
看代码具体分析吧;
这里写图片描述
关于String类通过方法传递修改的问题就到这里了,
总之一条就是;
String类要想通过方法调用改变引用指向是不能完成的,(暂时以我的知识);

暂时的问题;至于能不能加入c语言的思维,又来个引用指向这个引用的地址,来通过地址操作改变引用,而不是直接通过值改变。这个我就不知道了,暂时的一个问题吧?感觉应该不可以吧,

再看看String的兄弟StringBuffer或者StringBulider;

这里写图片描述
关于StringBuffer的总结就是一条;
如果跟String类那样试图在其他方法中改变StringBuffer引用来达到改变这个方法引用,这个是不能完成的,但是我们可以利用 StringBuffer是个字符串变量来直接改变这个字符串对象是可行的,注意这里引用还是没有变化的。

看完了这两个特殊的类,我们也同样来看下基础的对象吧;

这里写图片描述

看完这三个例子应该很好的理解了java中形参为引用类型时的问题了啊;

基本的一条;
如果想通过改变形参的引用,使引用类型指向新的对象,来达到改变其实参引用是无法实现的,
要想改变引用s指向的内容,只能使用形参操作对象的地址,来修改这个对象的值,只有这样才能完成修改,至于String类,这个就尴尬了,因为它是字符串常量,其对象是不能被修改的,我们一般说的修改String类都是修改其引用,至于在这里修改是没有用了,所以就尴尬了;

码完;尴尬的是,码博客码到一半寝室突然停电了,黑灯瞎火的盲打也不熟惜,然后就是转移阵地了,搬到傍边的寝室,现在才忙完,散工;

你可能感兴趣的文章
sql注入: 判断注入点类型
查看>>
千人千面Elasticsearch实战学习笔记
查看>>
最大子数组问题(递归)(java)
查看>>
2021年第十二届蓝桥杯软件赛省赛第二场 C/C++ 大学 A 组
查看>>
2020年哨兵数据批量下载(USGS)
查看>>
简单3步快速生成千万级别mysql测试数据库,模拟电商数据
查看>>
EasyDSS平台接入设备量过多的情况下如何进行批量推流测试?
查看>>
mysql数据库操作基础
查看>>
Mariadb基础管理
查看>>
kolla-ansible部署openstack+ceph高可用集群queens版本--- 部署说明
查看>>
kolla-ansible部署openstack+ceph高可用集群queens版本--- 环境准备及初始化
查看>>
kolla-ansible部署openstack+ceph高可用集群queens版本---docker私有镜像仓库配置
查看>>
mysql 中com.mysql.jdbc.PacketTooBigException 解决办法
查看>>
awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS
查看>>
CentOS系统内核升级攻略
查看>>
linux系统时区修改(Debian的主机和docker)
查看>>
docker-compose 安装
查看>>
crontab 定时任务
查看>>
查看docker veth pair与宿主机上网卡的对应关系
查看>>
使用 GitLab CI 进行持续集成的一些踩坑
查看>>