Think in Java学习笔记 第二章:一切皆对象

boolean类型所占据存储空间的大小没有明确指定,仅定义为能够去字面值truefalse

首先,这个没有明确指定是在Java规范中没有明确指定,而在Java虚拟机规范中指定了大小,如果仅是一个boolean变量的话,推荐占用四个字节,如果是boolean数组的话,其中每个boolean占用一个字节
规范中原文如下:

虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。


Java确保数组会被初始化,而且不能在它的范围外被访问。这种范围检查是以每个数组上少量的内存开销以及运行时的下标检查作为代价的。但由此换来的是安全性和效率的提升。

这段话应该和C中对于数组的访问结合在一起理解。因为C中对于数组的访问就是直接访问内存,即使你越界了,还是能够访问到数据,这是很危险的,因为有时候我们并不知道它获取到了错误的数据。Java中则是直接抛ArrayIndexOutOfBoundsException这个异常,这样我们能够更好地判断出程序出错了以及其bug所在的位置。这样Java的安全性就比C要高很多。


由new创建的对象,只要你需要,就会一直存在下去。

这句话的理解是,如果我们通过new来创建这个对象,这个对象又一直被你使用。那么它在堆中就会一直存活。如果我们不使用这个对象了,将对其的引用换成对其他对象的引用,这个对象就会从强引用变到弱引用,经过finalize方法之后变成虚引用,最终被回收掉。


方法名和参数列表(它们合起来被称为“方法签名”)唯一地标知出某个方法。

这个题目是我之前在抖音面试的时候遇到的。
我们知道一个方法由方法名、方法体、返回值和参数组成。设想下我们在调用一个方法的时候是通过什么调用的,就是通过方法签名。返回值之所以不能够用来标知出一个方法是因为有时候我们调用方法并不是为了使用其返回值。我们使用的是其方法体。

你可能感兴趣的:(Think in Java学习笔记 第二章:一切皆对象)