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.类可以实现多个接口,但只能继承一个超类