PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: 我要表达的意思是,创建对象的方法结束了,并不是这个方法里创建的对象被消除的充分条件。当然也不是必要条件。也就是说创建某个对象的方法执行是否结束,和这个对象是否会被清除,一点关系都没有。 先说不是必要条件,以你的代码为例,如果是指向这个对象唯一的引用,那么在后面加上一行b=null,这个对象也就没有引用指向它了。在方法执行完之前,这个对象就可以被清除掉。 再说不是充分条件。b并不一定是指向这个对象的唯一引用。在Book的构造方法里,完全可以把自己的引用放在别的对象的成员变量里,或者加到一个静态的list里。所以方法结束之后完全可以有别的引用指向这个对象。 所以,没有引用指向一个对象,那么这个对象铁定可以被清除。这个创建这个对象的方法是否执行完毕没有任何关系。
作者回复: 这个可能需要从不同的角度去理解。 变量的英语叫做variable,variable的词根vary就是变化,使得=多样化的意思。 到了计算机这边,variable(变量)就泛指一个有名字的值了。至于能不能变化,倒是其次的。与其对应的,更多的可能是literal value(字面值)。literal value只有值,没有名字,是一种更绝对的“常量”。 至于常量,可以认为是变量中特殊的一种,也就是值不可变化。这个就有点矛盾,本身叫变量,而又不能变化。其实Java中的常量,声明的语法如下: final int variableInt = 9; 也就是说,常量是使用final修饰的变量。 这些都是比较偏虚的,类似考试一样的问题。其实在实际编程使用中,只要说变量,常量,字面值就可以。理解每种概念的含义,不用纠结谁是谁的对应面。
作者回复: 完全正确✅
作者回复: 谢谢~,你也加油哦
作者回复: 扎心了老铁! 为了大家夯实基础,票圈分享起来,两千达成就靠你了~
作者回复: 没有,只有按值传递。
作者回复: 说到语言的功能,和C++比Java是弟弟(除了多了内存自动收集)。
作者回复: gift是当前对象的成员变量。相当于是this.gift
作者回复: 那本书的内容和这个视频都是Java基础,没必要重续买。
作者回复: 让m1和m2的gift指向不同的对象,就不会互相影响了