Java基础高频面试题(附带答案)

1. JDK 和 JRE 有什么区别?

⒈JDK:java development kit:java开发工具包,是开发人员所需安装的环境。
⒉JRE:java runtime environment:java运行环境,java程序运行所需要安装的环境。

2. == 和 equals 的区别是什么?

==:

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
⒈ 比较的是操作符两端的操作数是否是同一个对象。
⒉ 两边的操作数必须是同一个类型的(可以是父子类之间)才能编译通过。
⒊ 比较的是地址,吐过是具体的阿拉伯数字的比较,值相等则为true,如:
int a=10 与 long b=10L 与 double c=10.0 都是相同的(为true),因为他们都是指向地址为10的堆。

equals:

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Objece类中的放阿飞,而Object中的equals方法返回的却是==的判断。

总结:

所有比较是否相等时,都是用equals并且在对常量相比较时,把常量写在前面,因为使用object的equals object可能为null,则空指针
在阿里的代码规范中只是用equals,阿里创建默认会识别,并可以快速修改,推荐安装阿里插件来排查老代码使用“==”,替换成equals。

3.两个对象的 hashCode() 相同,则 equals() 也一定为 true ,对吗?

不对,在产生 hash 冲突时,两个不相等的队形就会有相同的 hashCode 值。
hashCode 方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合要添加新的元素师,先调用这个元素的 hashCode 方法,就一下子能定位到它应该防止的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用在进行任何比较了;如果这个位置上已经有元素了,就调用它的 equals 方法与心得元素进行比较,相同的话就不存了,不相同就散列到其他的地址。这样一来时间调用 equals 方法的次数就大大降低了,几乎只需要一两次。
当hash冲突时,一般有以下几种方式来处理:
1.拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向链表进行存储。
2.开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。
3.再哈希:幼教双哈希法,有多个不同的 Hash 函数,当发生冲突时,使用第二个,第三个…等哈希函数计算地址,直到无冲突。

4. final 在 java 中有什么作用?

⒈修饰类:表示该类不能被继承;
⒉修饰方法:表示方法不能被重写;
⒊修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

5. java 中的 Math.round(-1.5) 等于多少?

-1;
round()是四舍五入,-1.5 四舍五入后是 -1 。

6. String 属于基础的数据类型么?

不是。
java 中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;
除基本类型,剩下的都是引用类型,java 5 以后引入的枚举类型也算是一种比较特殊的引用类型。

7. java 中的操作字符串都有哪些类?他们之间有什么区别?

String、StringBuffer、StringBuilder

String : final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
StringBuffer : 对字符串的操作的方法都加了synchronized,保证线程安全。
StringBuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append、replace、delete等方法修改字符串。

8. String str = “i” 与 String str = new String(“i”) 一样吗?

不一样,因为内存的分配方式不一样。
String str=“i” 的方式,Java 虚拟机会将其分配到常量池中;
而 String str=new String(“i”) 则会被分到堆内存中。

9.如何将字符串反转?

https://blog.csdn.net/quentain/article/details/51142969

10.String 类的常用方法都有哪些?

charAt:返回制定索引处字符 indexOf():返回制定字符的索引 replace():字符串替换
trim():去除字符串两端空白 split():分割字符串,返回一个分割后的字符串数组 equals():字符串比较
getBytes():返回字符串的byte类型数组 length():返回字符串长度 toLowerCase():将字符串转成小写字母
toUpperCase():将字符串转成大写字符 substring():截取字符串 format():格式化字符串

11.抽象类必须要有抽象方法吗?

不是,有抽象方法的一定是抽象类,但抽象类不必须要有抽象方法。

12.普通类必须要有抽象方法吗?

普通类不能包含抽象方法。

13.抽象类能使用 final 修饰吗?

不能,抽象类是被用于继承的,final 修饰代表不可修改、不可继承的。

14.接口和抽象类有什么区别?

抽象类:
1.抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。
2.包含抽象方法的类,一定是抽象类。
3.抽象类只能被继承,一个类只能继承一个抽象类。

接口:
1.全部的方法都是抽象方法,属性都是常量。
2.不嫩实例化,可以定义变量。
3.接口变量可以引用具体实现类的实例。
4.接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法。
5.接口之间可以多实现,
6.一个具体类可以实现多个接口,实现多继承现象。

15. java 中的 IO 流分为几种?

1.按照流的流向分,可以分为输入流和输出流;
2.按照操作单元划分,可以划分为字节流和字符流;
3.按照流的角色划分,可以划分为节点流和处理流。
Java IO 流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系,Java IO 流的40多个类都是从如下4个抽象类基类中派生出来的。
1.InputStream/Reader:所有输入流的基类,前者是字节输入流,后者是字符输入流。
2.OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。

16. BIO、NIO、AIO 有什么区别?

http://blog.51cto.com/stevex/1284437

17. Files 的常用方法都有哪些?

Files. exists():检测文件路径是否存在。

Files. createFile():创建文件。

Files. createDirectory():创建文件夹。

Files. delete():删除一个文件或目录。

Files. copy():复制文件。

Files. move():移动文件。

Files. size():查看文件个数。

Files. read():读取文件。

Files. write():写入文件。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值