2017 -java面试总结1.1

作者: 栋哥0228 | 来源:发表于2017-09-03 20:32 被阅读27次

    本文我们将讨论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)的区别?重载的方法可以根据返回类型进行区分吗?

    答:方法的重载和重写都是实现多态的方式。

    重载是编译时多态,重写是运行时多态。

    重载发生在一个类中,同名的方法如果有不同的参数列表则视为重载。

    重写发生在子类和父类之间。重写要求子类被重写的方法与父类被重写的方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有特殊要求。

    相关文章

      网友评论

        本文标题:2017 -java面试总结1.1

        本文链接:https://www.haomeiwen.com/subject/cayhjxtx.html