Android studio 提示 Field can be converted to a local variable

 

今天提到的点,很基础,大概就是:在定义的成员变量上面,可能会有提示:Field can be converted to a local variable 

意思就是 字段可以被转化成一个局部变量。如下图:

这个case,网上一堆的解释,千篇一律,大部分只是在说如何去掉这个提示,解决方案有如下两种:

1、@SuppressWarnings("FieldCanBeLocal")

2、把全局变量删除,在使用的地方定义即可,不用全部都使用全局定义变量。

以上这都不是重点,也不算完,需要我们进一步考虑下,为什么会出这个提示,我们不按照建议修改代码会有什么影响,彻底弄懂这个问题,就需要去真正了解成员变量和局部变量的区别(往下看)👇

成员变量和局部变量的区别

    (1)在类中的位置不同
        成员变量:类中方法外
        局部变量:方法定义中或者方法声明上
    (2)在内存中的位置不同
        成员变量:在堆中(方法区中的静态区)
        局部变量:在栈中
    (3)生命周期不同
        成员变量:随着对象的创建而存在,随着对象的消失而消失
        局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
    (4)初始化值不同
        成员变量:成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值) 
        局部变量:没有默认值,必须定义,赋值,然后才能使用.

成员变量和局部变量区别,看到了这里大家也就真正明白了,为啥会提示了,重点就是:

成员变量生命周期比局部变量生命周期长,局部变量在方法消失之后,也就从内存中消失了,释放所占的内存。而如果一个变量只是一个局部变量,却定义成了成员变量,那也就相当于这个变量在内存中的存在时间变长了。

说到这里,可能有个别同学会说:“一个变量的事,不当紧不当紧,多存在一会没事没事”,那我就要说了,如果抱有这么个“无所谓”的态度,那么我敢冒昧的断言:在你的项目工程中 这种“局部变量被定义为成员变量”的情况应该还有。多个这种情况的存在,也就会额外增加内存的开销了(至于到达多少量级的内存开销 在这里就不讨论了,不一定),反正至少是,实现同样的业务,存在这种情况的代码,会比不存在的在内存占比、使用上要高。严重的讲,积少成多,会导致性能问题。你觉得呢?

今天贴出来这个简单的、常见的case,主要是想表达一个思想:平时写代码就要严谨、对自己高要求、不要放过任何一个不合理的细节,养成良好的编码习惯,以扎实的语言基本功为理论依据,来编写高质量代码。这么做,慢慢的、渐渐地,你会变的越来越优秀。

   以上,你认可吗?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值