JAVA面试题坐等Offer之JAVA基础(一)

一、 JDK与JRE的区别

JDK(Java Development Kit)是面向JAVA开发人员的工具,包括运行环境JRE,JAVA工具包,JAVA基础类库。

JRE  (Java Runtime Environment) 是JAVA必要的环境集合,包括JVM及JAVA核心类库。

JVM JAVA虚拟机,JAVA语言跨平台的关键,能够运行用JAVA语言编写的程序。

所以,JAVA语言是跨平台的,但是JAVA虚拟机并不是跨平台的,每个平台都有对应的虚拟机,JAVA语言通过字节码与每个硬件平台交流,JVM通过再翻译使得各个硬件平台可以读懂JAVA编写的程序。

二、 == 与 equals()的区别

== 一般是比较变量的是否相等所使用,比较的是变量在内存中所存储的数值是否相等,所以在比较基本数据类型的时候,使用==就可以了。但是在比较引用数据类型的时候,== 比较的是变量在内存中的地址,所以,我们一般使用其继承父类Object的 equals方法来比较。以String类型为例,我们可以看一下String equals()方法源码。

JAVA面试题坐等Offer之JAVA基础(一)_第1张图片

首先,使用 == 方法比较,如果二者的内存地址相同,证明是同一对象所以返回true,如果不同,比较是否继承 String接口,然后在比较二者的字符长度,最后比较字符串中的每个字符是否相等。

三、两个对象的HashCode()相同,那么二者的equals()一定为true吗?相反呢?

首先,大部分对象都会对父类Object的HashCode()方法重写,但是规则都大致相同,哈希表主要是对对象存址和寻址,所以两个对象的哈希值很有可能是相同的,但是二者并不一定是同一对象,举个例子就很容易理解了,两个名字相同的人,不能说是同一个人吧。名字就相当于是哈希值,虽然相同,但是并不一定是同一对象。相反,equals()为true,那么他们的数值和内存地址必定时相同的,所以HashCode()也一定是相同的。

四、final在Java中有什么作用?

final在实际应用中,大部分时间是用来修饰变量。但是如果final修饰基本数据类型时,该类型的变量数值是不允许改变的,所以是多少就始终是多少。如果修饰的是引用数据类型,final保证的是该变量始终保证指向的是同一引用地址,并且不发生变化,但是地址所指向的对象如果发生了改变,其实无法控制的。

五、抽象类必须要有抽象方法吗?

一个抽象类是可以没有抽象方法的,但是如果一个类被定义为抽象类,那么该类是不能再实例化的,不能直接生成该类的对象。

一个类如果办含抽象方法,那么该类必须被定义为抽象类,否则是不能编译通过的。

六、抽象类能否被final修饰?

抽象类是不能被final修饰的,因为final修饰的类是不能被继承的,所以抽象的abstract和final是不能共存的。

 

你可能感兴趣的:(JAVA面试题坐等Offer之JAVA基础(一))