PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: 是我讲的太好,还是你太优秀,关于引用的关系竟然理解的丝毫不差。 稍微有些不准确的是“后者是编译时确定的绝对地址”。这栈内地址也不是编译时确定的。每次调用方法都会给方法分配一段内存作为存储方法中局部变量所用。所以每个变量在这个基础上,也是一个偏移量,这个偏移量对每个变量来说说固定的。比如说a,可能就是8,每次都是栈地址+8是其真正的地址。 其实Java编译完之后,没有什么东西是有绝对内存地址的,中间还隔了一个Java虚拟机呢。即使是本地程序(比如Windows上编译成exe的程序),也不是绝对地址。如果我学的操作系统和汇编语言还没完全扔掉的话,好像只有内核有绝对地址?真实的内存地址有时候要经过好几次相对地址的变化,我记得当时一个基址变址寻址了解一下?
作者回复: 嗯呐,下次再有人问为什么你们程序员总喜欢从 0 开始计数,就反问:你知道什么是数组吗?
作者回复: 后续内容制作按计划稳步推进中。学完第一篇可以自己试着写一些小程序。比如双人五子棋对战。 我会提供一个代码实现,上传到GitHub供大家参考。 P.S. 觉得不错的话,东西欢迎分享 (-:
作者回复: 其实应该是我在点点点,但是本子太小了看着就像是在抖抖抖囧rz.....
作者回复: 大家能看懂, 我斥巨资买道具也值得 (-:
作者回复: ✅
作者回复: 因为YW是1,而classn[i]里的i是从0开始的,所以第一次循环的时候,classn[i]就是classn[0],你没给classn[0]赋值,所以classn[0]是null
作者回复: int b =new int[10]; 我不用book了,因为跟本子容易混淆,我用b来代替。 可以这么理解这个过程。b也是本子里的一页,比如说b本身是在第3页,那么b就代表第3页,第3页就是b,他们现在是一个东西。 好,那么接着看new int[10];,new int[10]就是说,创建了一个数组的实体,它是连续的10张纸,这10张纸的第一张的编号是25,那么这个实体就是第25到34这10张纸的整体。 然后再看这个等号,等号就是赋值操作,给b赋值就是往b代表的纸上写内容。 左边是一张纸b,右边是一沓纸,那么怎么赋值呢?其实这个赋值操作呢,是把右边这一沓纸的 第一张纸的 地址 取出来,给了b,也就是25。所以这行执行完毕后: b=就代表第3张纸 程序里有一沓纸,一种10张,被捆绑在了一起作为一个整体,也就是数组的实。这个实体的第1张纸的页码是25 第3张纸上上的内容被写成了数组实体的第一张纸的页码,也就是25。
作者回复: 是的,它是一个独立的领域
作者回复: 完全正确✅