采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
赋值给一个临时变量,然后都临时变量进行操作有什么好处么?
你说的是这个吧:
这算是随手为之的写法吧。已经深入骨髓,随手就爱这么写了。
一般来说遇到这样的场景,拿到某个变量,操作某些东西后会把变量设置为null的情况下,我都会这样做;或者说在其他地方有对这个变量进行设置的方法时,我也会这么做。
这样的目的在于,在多线程情况下,避免操作的变量发生变化导致意外的BUG。
比如此时变量指向了实例A,此时我需要两步进行操作,第一步:判断变量:
if
(packetTemp!=
null
)
那么这个判断可能是通过了,然后我们就需要对这个变量进行某些操作了,比如调用他的方法啥的:
第二步:
packetTemp.send()
但是,这个操作,并不是立刻发生,在我们判断过的情况下,可能存在CPU切换去做其他事情;比如此时刚好就有一个方法对其进行设置:
步骤三:
void
set(Packet packet){
packetTemp = packet;
}
也就是说我们最开始是实例A,我们也经过了第一步判断;但是在进行第二步处理前,CPU去做其他事情了,比如就进行了:步骤三。
执行完成后回来:那么顺序就是:第一步->步骤三->第二步
但是,但是,但是此时的packetTemp已经不是之前的实例A了,所以第二步的操作将得不到我们想要的结果;此时packetTemp可能是空,或者其他实例;反正都会导致问题出现。
所以我一般会采用上面的做法,存为局部变量,这样避免上述的问题。不管是否有在多线程情况下,我都会这样处理,而且存为局部变量后操作,会比直接操作全局变量更加快速。
非常感谢!
谢谢老师,总结来说就是,避免由于被操作的变量可能被改变,而将该变量赋值给另一个局部变量,对局部变量进行操作。其实我在看jdk的源码的时候也发现了很多这样的做法,之前一直觉得不理解。现在理解了。不是冗余就好~
嘿嘿,给个好评喽~~谢谢?;有问题随时提问,或者QQ找我哈。
登录后可查看更多问答,登录/注册
理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选
2.9k 1
1.9k 7
1.7k 5
2.0k 13
1.1k 13
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号