以后将陆续将一些Java基础的面试题陆续更新到这篇文档中
1 Java SE
1.1 方法重载和重写的区别
方法重载
发生在同一个类
中,特点是“两同三不同”
,参数列表不同
其中两同指的是,同一个类中,方法名称相同
三不同:参数列表的参数的类型,个数,顺序不同
方法重写
发生在父类和子类
中,特点是“一大两小两同”
,参数列表相同
两同:①方法名相同
②参数列表相同
两小:①子类返回值类型小于等于父类返回值类型(返回值为基本数据类型时,必须相等)
②子类抛出的异常小于等于父类抛出的异常
一大:子类访问控制修饰符大于等于父类访问控制修饰符
1.2 ==和equals()的区别
对于引用类型来说,==比较的是内存地址的哈希值。
通常来说,哈希值不同(==为false)表示两个对象并不是同一个对象(有很小的可能不同对象计算出的哈希值是相同的)。
==只是简单的比较哈希值,如果希望更严密的比较对象,如不仅比较地址,也要比较对象的值的话,就可以重写equals方法
。
equals()来自Object类,其中的实现就是返回==
比较的结果。因此需要重写并实现。
注,String的equals()比较特殊,它已经重写过了,实现为,先通过==比较引用地址的哈希值,再逐一的比较字符是否相等,都通过了才返回true。
1.3 实例化数据的方式
此种类型的题多是选择题,牛客上有多种的实例化方式,以后遇到了可以粘过来。
数组实例化了以后不能再更改数组容量大小。
int [] a= new int[]{ 1 , 3 , 3}
1.3 Java中各种数据默认值
Byte,short,int,long默认是都是0
Boolean默认值是false
Char类型的默认值是’’
Float与double类型的默认是0.0
对象类型的默认值是null
1.4 Object类常用方法有那些?
equals()
hashcode()
toString()
wait()
notify()
clone() 浅复制
getClass()
1.5 形参和实参
此类型的题多是选择题。
当形参是基本类型
时,改变形参的值不会影响实参的值
,因为基本类型是指传递
。
当形参是引用类型
时,改变形参的值会影响实参的值
,因为引用类型是引用地址传递
。
1.6 String、StringBuffffer 和 StringBuilder 的区别是什么?
String是一个被final修饰的类,无实现接口和继承的类。因此对象不可变,在进行大量字符串拼接操作时性能在三者中性能最低。
StringBuffer 和StringBuilder 都继承自AbstractStringBuilder,因为没有final修饰,对象都是可变的,适用于进行字符串拼接操作。
区别在于相同情况下使用StringBuilder比StringBuffer仅能获得10%~15%性能的提升,但却要冒着多线程不安全的风险。
速度:StringBuilder>StringBuffer>String
,
StringBuilder线程不安全
,StringBuffer和String线程安全
。
1.7 讲下java中的math类有那些常用方法?
Pow():幂运算
Sqrt():平方根
Round():四舍五入
ceil():向上取整
floor():向下取整
Abs():求绝对值
Random():生成一个0-1的随机数,包括0不包括1
1.8 接口和抽象类的区别
未完待续