java引用数据类型有哪些|日常开发高频用到的几类实操区分

java引用数据类型有哪些|日常开发高频用到的几类实操区分

刚上手写Java项目的时候,一直分不清java引用数据类型有哪些,敲代码频繁把基本类型和引用类型混着用,调试bug调到大半夜都找不到问题在哪。

数组就是最常见的引用类型,一开始压根没反应过来,定义int数组的时候理所当然觉得和int变量一样,赋值传递也是直接改值就行。结果循环遍历修改数组内容,外面的变量跟着一起变,折腾好久才搞明白,数组存的不是真实数据,只是指向内存地址的引用。

类对象也是天天打交道的引用类型。写实体类的时候新建User对象,把对象传给方法做参数修改,方法里改完属性,外面原本的对象数据也跟着变动。之前傻傻以为只是复制了一份内容,反复测试多次才懂,传递过去的依旧是内存地址,并不是独立的数据副本。

字符串String同样属于引用类型,这点特别容易混淆。看着用法跟基本类型差不多,赋值、比较都很简单,可一旦用==去对比两个字符串内容,结果经常出错。明明字符一模一样,判断结果却是false,踩了无数次坑之后,才牢牢记住字符串底层也是对象引用,不能直接用相等符号对比内容。

接口实现对象也归在引用数据类型里。多态写法里父接口引用指向子类实例,平时写业务逻辑天天在用,以前只知道这么写不出错,却不清楚本质还是引用传递。接口变量本身不存放对象实体,只是指向具体子类对象的地址,换不同实现类,引用指向跟着变化,程序运行效果就完全不一样。

集合框架里所有List、Map、Set全都是引用类型。往方法里传入ArrayList集合,在方法内部新增删除元素,原集合数据会同步变化。很长一段时间都习惯性新建集合拷贝数据,白白多写很多冗余代码,后来做多层参数传递,才慢慢摸清引用传递的底层逻辑。

枚举类型也属于Java引用数据类型,平时用的时候很少特意归类。切换状态、区分业务类型都会用到枚举,赋值操作不会开辟新内存,多个变量指向同一个枚举常量地址,乱用赋值替换,很容易出现意想不到的数据错乱。

一开始死记硬背分类清单,背完转头就忘,面试一问就卡壳。后来跟着项目一点点敲代码,碰各种传参异常、地址指向混乱、对象空指针问题,才慢慢把所有引用类型对应到实际代码里。不用死记概念,写多了自然一眼就能分清哪些是引用,哪些是基本数据类型。

从来没按照书本死板分类记忆,全靠一次次报错排查慢慢捋顺。很多新手和当初的我一样,只背名称不理解地址引用逻辑,写代码永远踩同样的bug。

直到项目收尾整理代码,才静下心梳理完整分类,原来日常开发高频接触的,始终就是数组、类、字符串、接口、集合、枚举这几大类。

那天关掉编辑器之后,很久都没再纠结类型分类问题。

了解更多百科知识请访问 百科