Java面试题(基础)

直入主题:

1、8种基本数据类型,以及他们的封装类

基本数据类型:byte,short,int,long,float,double,char,boolean。

封装类:Byte,Short,Integer,Long,Float,Double,Character,Boolean。

2、引用数据类型

引用数据类型由类的编辑器定义的,它们是用于访问对象的,这些对象被定义为不可更改的特定类型。

  1. 类对象和数组变量就是这种引用数据类型
  2. 任何引用数据类型的默认值都为空。
  3. 一个引用数据类型可以被用于任何声明类型和兼容类型的对象。

3、switch能否用String来做参数

在JDK1.7之前switch的参数支持的数据类型包括:int,short,byte,char。switch的括号后面只能够包含int类型,但是short,byte,char能够自动转换为int类型(精度小的向精度大的自动转换)。

但是在JDK1.7之后进行了修改,switch开始支持String类型、枚举类型、boolean。

其实switch并没有用新的方法来处理switch String,而是通过string.hashcode方法将string转换为int类型来进行判断。(本质上还是通过比较int类型来判断)

4、equals与==号的区别

equals是Object中的方法,可以被重写,而==只能够比较符号两边对象的内存地址。

补充:

在object源码中equals的实现就是通过==来实现的,本质上并没什么不同,但是在某些类中equals被重写了。

在object中的equals方法跟==都是通过比较内存地址的一致性来判断比较双方是否相同的。

5、自动装箱,自动拆箱

自动装箱:将基本数据类型变量赋值给对应的包装类的变量。

自动拆箱:将包装类型的变量赋值给对应的基本数据类型的变量。

6、Object有哪些公用的方法?

clone,equals,hashcode,getClass,wait,notify,notifyall,toString

clone:实现对象的浅复制,只有实现了Coneable接口才可以调用该方法,否则抛出CloneNotSupportedException。

equals:在Object中与==是一样的,子类一般需要重写该方法。

hashcode:该方法用于hash查找,如果重写了equals方法一定要重写equals方法。

getClass:final方法,获得运行时的类型。

wait:使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait设置一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后,当前线程进入睡眠状态,直到以下事件发生

notify:唤醒在该对象上等待的某个线程。

notifyAll:唤醒在该对象上等待的所有线程。

toString:转换成字符串,一般子类都有重写,否则打印句柄。

7、Java中的四种类型的引用,强软弱虚

强引用:最普遍的一种引用方式,如:String s = "abc"。变量's'就是字符串“abc”的强引用,只要强引用一直存在,就不会被垃圾回收。

软引用:用于描述还有用,但是非必须的对象,如果内存足够,不回收,内存不足,则回收。一般用于实现内存敏感的高速缓存,软引用可以和引用队列ReferenceQueue联合使用,如果软引用的对象被垃圾回收,JVM就会把这个软引用加入到与之关联的引用队列中。

弱引用:弱引用跟软引用大致相同,区别在于:只具有弱引用的对象拥有更短暂的声明周期。在垃圾回收线程扫描它所管辖的内存区域的过程中,一旦发现了只具有虚引用的对象,不管当前线程的内存是否充足,都会回收。

虚引用:虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都有可能被垃圾回收器回收。虚引用主要用来跟踪对象被垃圾回收器回收的活动。

8、HashCode的作用

举例:

当集合要添加新元素的时候,先调用这个元素的HashCode方法,一下子定位到它应该放置的物理位置上去。

  1. 如果这个位置上没有任何元素,它就可以直接存储在这个位置上,不用再进行任何的比较。
  2. 如果这个位置上存在元素,就调用它的equals方法跟新元素进行比较,相同的话就不存了
  3. 不相同的话,也就是发生了hashkey相同导致冲突的情况,那么就在这个hashkey的地方产生一个链表,将所有产生相同的HashCode的对象放到这个单链表上去,串在一起。

补充:

HashCode的特性:HashCode的存在主要是由于它查找的快捷性,如HashCode,HashTable等,HashCode经常用于查找的快捷性。(会继续补充)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值