PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: ✅ 你get了
作者回复: 赋值是给引用赋值,并不是将整个数组的值复制过去。否则的话,如果a3很长,那不乱套了。 如视频所说,超过一维的数组,都是引用(当然,如果是Object的数组,一维的也都是引用)。至于引用指向哪个对象,是可以赋值的,但是这个赋值,只是引用之间的赋值,不牵扯到数组数据的复制。 简单来说,数组本身的数据,都是连续的。问题在于,数组本身的数据是什么。对于三维基本数据类型数组来说,比如 double[][][] double3DArray = new double[10][2][4]; double3DArray的第一维,第二维,都是引用,随便指向哪个数组都行,只要类型匹配。直到第三维,才能获得真正的数据。
作者回复: ✅
作者回复: merchandise[9]是空。 new Merchandise[10]只是创建了一个大小为10,类型为Merchandise的引用,的数组。但是这10个引用的指都是null,也就是说不指向任何对象,所以merchandise[9].name就=null.name,所以就会报空指针错误。
作者回复: 完全正确
作者回复: 右边:创建一个Merchandise的对象。 左边让merchandises这个数组里的索引为1的元素(是一个Merchandise的引用)指向这个新创建的Merchandise对象。
作者回复: 多写点代码,似懂会越来越多,非懂会越来越少
作者回复: 是的,第一个对象会被Java的内存回收给处理掉。但是这不算内存泄露,是正常的内存使用。 简单来说,Java不存在内存泄露。或者说,所有有内存回收的语言,都不存在内存泄漏。内存泄露都可以认为是代码的bug。比如Java里典型的使劲儿往一个static list里增加元素,但是不删除,慢慢的内存就满了。
作者回复: 是的,数组这种特殊的类就是特殊在它没有具体的代码。它只有一个length属性。这个属性还是final的。还有个clone方法,是覆盖Object的。 关于验证,你可以在后面学到Class类之后,试试看arrClass里到底有啥。 int[] arr = new int[2]; Class arrClass = arr.getClass();
作者回复: //这边可以看成a[0]就是一个对象,a[1],a[2],a[3]同样如次 a[0]是个int变量,类似int a这样。