问题一:JAVA的原始数据类型有哪些,它们的大小以及其对应的封装类是什么?
数据类型 | 对应大小 | 对应的封装类 |
boolean | 1bit,boolean类型单独使用是4个字节,而在数组中又是1个字节 | Boolean |
byte | 1byte 1字节 | Byte |
short | 2bytes 2字节 | Short |
int | 4bytes 4字节 | Integer |
long | 8bytes 8字节 | Long |
float | 4bytes 4字节 | Float |
double | 8bytes 8字节 | Double |
char | 2bytes 2字节 | Character |
问题二:谈一谈"=="和"equals()"区别
关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系。
"=="判断的是两个对象的内存地址是否一样,适用于原始数据类型和枚举类型(它们的变量存储的是值本身,而引用类型变量存储的是引用);equals是Object类的方法,Object对它的实现是比较内存地址,我们可以重写这个方法来自定义"相等这个概念"。
综上,对于枚举类型和原始数据类型的相等性比较,应该使用"==";对于引用类型的相等性比较,应该使用equals方法。
问题三:Java的四种引用以及其应用场景是什么?
强引用:通常我们使用new操作符创建一个对象时所返回的引用就是一个强引用。
软引用:若一个对象只能通过软引用到达,那么这个对象在内存不足时会被回收,可用于图片缓存中,内存不足时系统会自动回收不再使用的Bitmap。
弱引用:若一个对象只能通过弱引用到达,那么它就会被回收(即使内存充足),同样可用于图片缓存中,这个时候如果Bitmap不再使用就会被回收
虚引用:虚引用是JAVA中最弱的引用,通过它甚至无法获取被引用的对象,它存在的唯一作用就是当它指向的对象回收时,它本身会被加入到引用队列中,这样我们可以知道它指向的对象何时会被销毁。
问题四:Object中定义了哪些方法?
clone()、equals()、hashCode()、toString()、notify()、notifyAll()、wait()、finalize(),getClass();
问题五:hashCode的作用是什么?
哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。这样一来,当集合要添加新的元素时,先调用这个元素的HashCode方法,就一下子能定位到它应该放置的物理位置上。
(1)如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;
(2)如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了;
(3)不相同的话,也就是发生了Hash key相同导致冲突的情况,那么就在这个Hash key的地方产生一个链表,将所有产生相同HashCode的对象放到这个单链表上去,串在一起。这样一来实际调用equals方法的次数就大大降低了。
所以hashCode在上面扮演的角色为寻域(寻找某个对象在集合中区域位置)。hashCode可以将集合分成若干个区域,每个对象都可以计算出他们的hash码,可以将hash码分组,每个分组对应着某个存储区域,根据一个对象的hash码就可以确定该对象所存储区域,这样就大大减少查询匹配元素的数量,提高了查询效率。