本文我们将讨论java面试中经常出现的考题,相信网上会有一大堆,但是只是笼统的说可一些答案,本文将进行总结出现概率高的考题。不难发现考题一般都是比较注重基本的。所以在更细完面试题(11篇)后将会进行总结一些基础的知识点结合java的底层进行讲解。第13篇将会对数据库常用查询进行总结(乐观锁+悲观锁+触发器等)。
1、String 是基本数据类型吗?
答:不是,java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本数据类型、枚举数据类型,剩下的都是引用类型。
2、short s1=1;s1=s1+1;有错吗?short s1=1;s1+=1;有错吗?
答:对于 short s1=1;s1=s1+1;由于1是int类型,因此s1+1也是int类型,需要强制转换才能赋值给short。而short=1;s1+=1;可以正确编译,因为s1+=1;相当于s1=(int)s1+1;其中隐含着强制类型转换。
3、float f=3.4;是否正确?
答:不正确,3.4是双精度的(double)。将双精度的赋值给浮点数属于向下转型对造成精度丢失,数据窄化需要进行强制类型转换。正确格式为:float f=(float)3.4;或者float f=3.4F;
4、int 和integer的区别?
答:int是基本类型数据之一,integer是int的包装了。java为每个基本类型提供了对应的包装类,在java5开始引入了自动拆箱/装箱机制。使得二者之间可以相互转换。
-原始数据类型:boolean、char、short、int、long、float、double
-包装类型:Boolean,Character,Byte、Short、Integer、Long、Float、Double
例如:
public static void main(String[] args) {
Integer t1=new Integer(3);
Integer t2=3; //自动装箱
int t3=3;
System.out.println(t1==t2); //false 比较的是两个引用
System.out.println(t1==t3);//true t1进行了自动拆箱成int 然后进行比较
}
案例2:
public static void testAutoUnboxing(){
Integer f1=100,f2=100,f3=150,f4=150;
System.out.println(f1==f2);//true 在 -128~127 之间 不会new出新的对象
System.out.println(f3==f4);//false
}
解释:f1~f4都是Integer对象的引用,所以==比较的不是值而是引用,当字面量的值在-128~127之间,是不会创建新的对象,而是直接引用常量池中的Integer对象的。
5、&&和&的区别?
答:&运算符:按位与,逻辑与。 &&:短路与,运算与;
6、栈、堆、静态区的区别?
答:栈空间:定义的数据类型变量、一个对象的引用、函数调用的现场保存。
堆空间:通过new关键字和构造器创建的对象。
静态方法区:字面量、常量等。
栈空间操作起来最快但是栈很小,通常大量的对象都放在堆空间。
7、switch是否能作用范围?
答:在java5以前,switch(expr)中,expr只能是byte,short,char,int.
java5 引入了枚举类型, java7开始expr还可以是字符串(String)。但是long长整型在目前所有的版本都是不支持。
8、构造器是否可以被重载或者重写?
答:构造器不能被继承,因此不能被重写,但可以被重载。
9、String\StringBuffer\StringBuilder的区别?
答:他们都可以存储字符串。
String 是只读字符串,一旦赋值不可改变。StringBuffer/StringBuilder类表示的字符串对象可以进行修改。StringBuilder是java5引入的方法和StringBuffer完全相同,区别在于:builder是在单线程下使用,因为它所有的方法都没有synchronized修饰,因此它的执行效率比较高。
10、重载(overload)和重写(Override)的区别?重载的方法可以根据返回类型进行区分吗?
答:方法的重载和重写都是实现多态的方式。
重载是编译时多态,重写是运行时多态。
重载发生在一个类中,同名的方法如果有不同的参数列表则视为重载。
重写发生在子类和父类之间。重写要求子类被重写的方法与父类被重写的方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有特殊要求。