当前位置: 首页 > 后端技术 > Java

【Java】重构代码时,为什么禁止在方法中给对象类型赋值?

时间:2023-04-02 00:06:46 Java

方法中对象类型的入参赋值(简单类型和字符串类型的入参允许赋值)。那么大部分初学者都会有疑惑,这个规范的主要意义是什么?本文探讨了该规范背后的目的。引用传递和值传递要理解上述问询题,首先要回过头来理解Java基础中引用传递和值传递的概念。基本定义传值:调用函数时,复制实参传递给函数。如果在函数中修改参数,原实参不受影响。按值传递的数据类型,包括基本数据类型和String对象。示例:publicstaticvoidmain(String[]args){inti=1;Stringstr="传值,不变";passByValue(i,str);System.out.println("i传完后:"+i);System.out.println("Afterpassingstr:"+str);}publicstaticvoidpassByValue(inti,Stringstr){i=0;str="修改传值";System.out.println("我传值:"+i);System.out.println("strpassvalue:"+str);}//print----------ipassvalue:0strpassvalue:修改passvalueipassing:1strpassing:valuepassing,unchanged可以看出,对于基本类型和String类型,传值后不会改变原来的值。引用传递:调用函数时,将实参的地址直接传递给函数。如果在函数中修改参数,实际参数将受到影响。按值传递的数据类型,包括数组、类和接口。示例:publicstaticvoidmain(String[]args){Mapmap=newHashMap<>(8);map.put("desc","按引用传递,值会改变吗?");passByRef(地图);System.out.println("地图传递后:"+map.toString());}publicstaticvoidpassByRef(Mapmap){map.put("desc","修改引用传递");System.out.println("maptransfervalue:"+map.toString());}//print--------maptransfervalue:{desc=modifyreferencetransfer}aftermaptransfer:{desc=修改参考pass}根据打印的值,如果是参考pass,修改pass后的原值。那么通过上面两个例子,大家就可以理解Java中引用传递和值传递的概念了。本质原因是因为Java编程语言是按值传递的,所以Java中没有指针的概念。也就是说,方法得到的是所有参数值的副本,方法不能修改传递给它的任何参数变量的内容。基于以上的设计原则,我们在开发中也应该遵循这个原则。更重要的是,如果修改了传递参数的值,会增加后期维护程序的难度。因此,在开发中,要规范代码,提高代码质量。