PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: 在方法里的局部变了,给引用赋值为null只是一个习惯操作。因为Java语法要求局部变了必须在使用前赋值,否则会有语法错误。你的理解是对的,只是对null的理解有些复杂。 “而与赋值为null的区别无非就是多消耗了一块内存空间” 赋值为null,就是说这个引用啥都不指向。null,空,nothing,虚无,不存在。所以赋值为null,并不会浪费一块内存空间。 从物理上说,给引用赋值为null,只是让这个引用的值为0。也就是不指向任何对象。而后面给引用赋值,就是让引用的值为一个实际存在的对象的地址。
作者回复: 嗯呐,从源代码层面看是的。点个赞,是个认真思考的好同学。 初学编程就是要多想多试。不能盲从,想不明白的就多想想,再想不明白的就多问问。 就这个例子来说,这种优化编译器或者JIT编译优化会做。关键是源代码首先考虑的问题是易读性,易维护性。所以我当时为什么顺手就写成那个样子了呢?搞个局部变量出来。职业习惯吧。
作者回复: 可以给它赋值为merchandises[0],但是不适合创建一个新的商品对象赋值给它。毕竟这里要求是找出超市出售的商品里利润最高的,而创建一个新的商品,并不是超市里的商品。如果超市里的商品都在打折赔本甩卖,那最终的返回值就会是创建出来的这个新的商品的利润了。
作者回复: =是赋值,==是比较。 如果你的问题是为啥要两次赋值的话,确实在这里MerchandiseV2 curr=null是有点多余的,直接MerchandiseV2 curr就可以。 MerchandiseV2 curr=null纯属个人习惯,因为Java里的局部变量必须要给初始值,如果不给初始值就使用,会出错。
作者回复: 👍
作者回复: 不用问题消灭零留言,说明学会了。俺很欣慰。
作者回复: 加油!确实,视频和面对面的教学不一样。视频要尽量提高知识密度,不要“水视频”。
作者回复: 一试便知😄
作者回复: 你尝试在github上下载看看,不确定gitee上有么有。下载的压缩包为空一般是出错了。或者你装上git,用git clone试试看
作者回复: MerchandiseV2 curr = null; 就是创建了一个名字为curr的类型为MerchandiseV2的索引,然后给它赋值为null,让它指向空。