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