java基础面试(一)

1.JDK与JRE的区别

  JDK,Java Development Kit 的简称,java的开发工具包,提供了java开发和运行环境;

  JRE,Java Runtime Environment 的简称,java运行环境,为java的运行提供了所需环境,包含了java虚拟机,java基础类库;

  具体来说,JDK其实包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具。

  简单来说:如果你需要运行java程序,只需要安装JRE就可以了,如果你需要编写java程序,需要安装JDK。

2.==与equals的区别是什么

  对于==,如果作用于基本数据类型的变量,则直接比较其存储的值是否相等;

如果作用于引用类型的变量,则比较的是所指向的对象的地址

  对于equals方法,注意:equals方法不能作用于基本数据类型的变量

  如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

  诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容

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

  不对,两个对象的hashCode()相同,equals也不一定为true。  

  首先直接回答不一定。

  在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。

  重写equals()方法,必须重写hashCode()方法,以保证equals方法相等时两个对象 hashcode返回相同的值。

  如果重写了hashCode方法就很可能出现hashCode相同equals为false的情况。

  比较两个对象是否相等就可以重写hashCode和equals方法,使用equals就能判断是否相等。

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

  final修饰的类叫最终类,该类不能被继承

  final修饰的方法不能被重写

  final修饰的变量叫常量,常量必须初始化,初始化之后不能被修改

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

  等于-1;因为数轴上取值时,中间值(0.5)向右取整,所以正0.5是往上取整,负0.5直接舍弃

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

  不属于。

  基础数据类型有八种:

    整数型:byte、short、int、long

    浮点数型:float、double(默认是double类型,若加后缀F为float类型)

    布尔类型:boolean

    字符类型:char

    而String属于对象

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

  操作字符串的类有3个:String、StringBuffer、StringBuilder

  区别:

    String与其他两个的区别在于:String声明的是不可变得对象,底层运用了一个不可变的字符数组(final char[]),每次操作都会生成新的String对象,然后将指针指向新的String对象,而其他两个可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String。

    StringBuffer和StringBuilder最大的区别在于:StringBuffer是线程安全的,而StringBuilder是非线程安全的,但StringBuilder的性能却高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程环境下推荐使用StringBuffer。

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

  不一样,因为内存的分配方式不一样。

  String str="i"的方式,java虚拟机会将其分配到常量池中

  String str=new String("i")则会被分到堆内存中

9.如何将字符串翻转?

  使用StringBuilder或StringBuffer的reverse()方法

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

  indexOf():返回指定字符的索引    charAt():返回指定索引处的字符

  replac():字符串替换        trim():去除字符串两段的空白

  split():分割字符串,返回一个分割后的字符串数组

  getBytes():返回字符串的byte类型数组  length():返回字符串长度

  toLowerCase():将字符串转成小写字母  toUpperCase():将字符串转成大写字符

  substring():截取字符串  equals():字符串比较

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

  不是必须的

12.普通类与抽象类有哪些区别?

  普通类不能包含抽象方法,抽象类可以包含抽象方法

  抽象类不能直接实例化,普通类可以直接实例化

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

  不能

  定义抽象类就是让其他类继承的,如果定义为final该类就不能不被继承,这样彼此就会产生矛盾

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

  他们都不能实例化对象,都可以包含抽象方法,而且抽方法必须被继承的类全部实现

区别:

  1.抽象类的子类使用extends来继承;接口必须使用implements来实现接口

  2.抽象类要被子类继承,接口要被类实现

  3.接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

  4.接口定义的只能公共静态常量(public static final ),抽象类中的变量是普通变量

  5.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

  6.接口中的方法默认使用public修饰;抽象类中的方法可以是任意访问修饰符

  7.类可以实现多个接口,但只能继承一个超类

(0)

相关推荐