今天提到的点,很基础,大概就是:在定义的成员变量上面,可能会有提示:Field can be converted to a local variable
意思就是 字段可以被转化成一个局部变量。如下图:
这个case,网上一堆的解释,千篇一律,大部分只是在说如何去掉这个提示,解决方案有如下两种:
1、@SuppressWarnings("FieldCanBeLocal")
2、把全局变量删除,在使用的地方定义即可,不用全部都使用全局定义变量。
以上这都不是重点,也不算完,需要我们进一步考虑下,为什么会出这个提示,我们不按照建议修改代码会有什么影响,彻底弄懂这个问题,就需要去真正了解成员变量和局部变量的区别(往下看)👇
成员变量和局部变量的区别
(1)在类中的位置不同
成员变量:类中方法外
局部变量:方法定义中或者方法声明上
(2)在内存中的位置不同
成员变量:在堆中(方法区中的静态区)
局部变量:在栈中
(3)生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
(4)初始化值不同
成员变量:成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值)
局部变量:没有默认值,必须定义,赋值,然后才能使用.
成员变量和局部变量区别,看到了这里大家也就真正明白了,为啥会提示了,重点就是:
成员变量生命周期比局部变量生命周期长,局部变量在方法消失之后,也就从内存中消失了,释放所占的内存。而如果一个变量只是一个局部变量,却定义成了成员变量,那也就相当于这个变量在内存中的存在时间变长了。
说到这里,可能有个别同学会说:“一个变量的事,不当紧不当紧,多存在一会没事没事”,那我就要说了,如果抱有这么个“无所谓”的态度,那么我敢冒昧的断言:在你的项目工程中 这种“局部变量被定义为成员变量”的情况应该还有。多个这种情况的存在,也就会额外增加内存的开销了(至于到达多少量级的内存开销 在这里就不讨论了,不一定),反正至少是,实现同样的业务,存在这种情况的代码,会比不存在的在内存占比、使用上要高。严重的讲,积少成多,会导致性能问题。你觉得呢?
今天贴出来这个简单的、常见的case,主要是想表达一个思想:平时写代码就要严谨、对自己高要求、不要放过任何一个不合理的细节,养成良好的编码习惯,以扎实的语言基本功为理论依据,来编写高质量代码。这么做,慢慢的、渐渐地,你会变的越来越优秀。
以上,你认可吗?