java基础面试题(一)附答案
-
Java语言有哪些优势?
- java是面向对象编程的
- java具有可跨平台性
- 可以进行网络编程
- 执行方式采取解释执行和编译执行并存方式
-
java中常见的基本数据类型都有什么?包装类都是什么?各占多少字节?
- byte BYTE 1字节
- short SHORT 2字节
- int Integer 4字节
- long Long 8字节
- float Float 4字节
- double Double 8字节
- char Character 2字节
- Boolean
-
== 和equals的区别是什么?
- ==是逻辑运算符 ;
- 基本数据类型使用是比较值大小,
- 引用数据类型比较内容
- equals是Object类中的方法;
- 基本数据类型不能使用,
- 引用数据类型比较地址(String类),如果没有重写此方法,则还是比较内容;
- ==是逻辑运算符 ;
-
&和&&的区别是什么?
- &是位运算符,
- 数值进行运算时将数字转换为二进制,然后进行与运算(同1位1,否则为0);
- &符号是不短路与运算 a&b 不管a是否为false,b照样可以执行
- &&是逻辑运算符
- &&是短路与运算
- &是位运算符,
-
关于HashCode你怎么理解?
HashCode是是Object类的本地native方法,底层是使用C语言/C++实现的,是获取该对象的哈希码;HashCode码是该对象的内存地址通过hash方法计算出的值,表示该对象在hash表中的位置,用于该对象的方便查找,可以快速定位该对象的位置;使用HashCode方法,可避免equals方法的频繁使用
-
请你说一下String、StringBuffer和StringbBilder的区别和使用
String、StringBuffer和StringbBilder用于保存数据的字符集合,
-
String类是不可变的,在jdk1.8使用的是private final char[] value来保存字符,在jdk1.9使用private final byte value[]来保存字符;
String使用保存一些更改次数较少的字符,因为不同的字符串都会产生一个新的对象,对性能和开销都很大
-
StringBuffer和StringbBilder类也是保存字符,但他们俩个是可以对字符进行修改的
StringBuffer和StringbBilder都继承的是AbstractStringbBilder父类,它没有对方法进行final修饰,所以是可以更改的,修改的是字符串本身, 用于一些经常修改的字符串
-
-
说一说你对final关键字的理解
final关键字修饰的都是最终的
-
修饰一个类表示该类不能被继承
-
修饰一个方法表示该方法不能被重写
-
修饰变量
修饰一个常量表示常量不可变
修饰一个引用变量表示引用的地址不能发生变化
-
-
final、finally、finalize的区别是什么?
- final关键字修饰的都是最终的
- finally是异常处理的最终一定执行的部分,一般搭配try或者catch使用
- finalize是Object类的方法,是垃圾回收的相关方法,启动垃圾回收器会执行此方法
-
访问修饰符都是哪些?作用范围?
访问修饰符都有
private 私有的作用范围是当前类
protected 受保护的作用范围是本包或者子类
default 默认的(友好的)同一个包下的
public 公共的作用范围是所有包都可访问
-
为什么重写equals方法时候需要重写HashCode方法?
equals()方法和HashCode()方法两者的符合两个关系
-
当两个对象相同时(equals方法返回值为true),则两个对象的HashCode的一定相同
-
当两个对象的HashCode相同时,但这两个对象并不一定是同一个(比如“重地”和“通话”,HashCode值相同,但是是两个对象)
综上所述:任意覆盖了equals方法的类一定覆盖了hashCode方法,反之就违背了Object.HashCode的约定,会使该类和其他基于散列的集合(HashTable、HashMap)不能正常运作
-
另外可以避免equals方法被频繁调用,提高性能;且hashCode计算是(n-1)&HashCode位运算,相对是比较快的。
-