济南Java培训
达内济南山大路中心

17343065216

热门课程

济南java培训班经典基础题目

  • 时间:2017-06-30
  • 发布:达内小编
  • 来源:济南达内

    1、String 是最基本的数据类型吗?

    答:不是.

    Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type).

    2、float f=3.4;是否正确?

    答:不正确.3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F.

    3、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

    答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型.而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换.

    4.&和&&的区别?

    答:虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true.

    但&&(也称短路与运算),如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算.很多时候我们常用&&而不是&.

    例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常.

    注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此.

    5.int和Integer有什么区别?

    答:Java为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换.

    Java 为每个原始类型提供了包装类型:

    - 原始类型: boolean,char,byte,short,int,long,float,double

    - 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

    永不过时的java经典基础题目(一)

    面试真题:代码如下,请回答输出结果:

    Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;

    System.out.println(f1 == f2);

    System.out.println(f3 == f4);

    如果不明就里很容易认为两个输出要么都是true要么都是false.首先需要注意的是f1、f2、f3、f4四个变量都是Integer对象引用,所以下面的==运算比较的不是值而是引用.装箱的本质是什么呢?当我们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf,如果看看valueOf的源代码就知道发生了什么.

    永不过时的java经典基础题目(一)

    永不过时的java经典基础题目(一)

    简单的说,如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的面试题中f1==f2的结果是true,而f3==f4的结果是false.

    6.解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法.

    答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在静态区中.栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用.

    1String str = new String("hello");

    上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量放在静态区.

    补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫"逃逸分析"的技术,可以将一些局部对象放在栈上以提升对象的操作性能.

    7.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

    答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11.

    解析:四舍五入的原理是在参数上加0.5然后进行下取整.

    8.用最有效率的方法计算2乘以8?

    答: 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方).

    解析:java中有三种移位运算符:

    << : 左移运算符,num << 1,相当于num乘以2

    >> : 右移运算符,num >> 1,相当于num除以2

    >>> : 无符号右移,忽略符号位,空位都以0补齐

    9.构造器(constructor)是否可被重写(override)?

    答:构造器不能被继承,因此不能被重写,但可以被重载.

    10、重载(Overload)和重写(Override)的区别.重载的方法能否根据返回类型进行区分?

    答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性.重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则).重载对返回类型没有特殊的要求.

    图文并茂,写了个类:

    永不过时的java经典基础题目(一)

    如果面试题这样问:为什么不能根据返回类型来区分重载?该知道如何回答了吧

    11、是否可以继承String类?

    答:String 类是final类,不可以被继承.

    补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系(Is-A).

    12、String和StringBuilder、StringBuffer的区别?

    答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串.其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的.而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改.StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高.

    面试题1 - 什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好?

    答:如果使用少量的字符串操作,使用 (+运算符)连接字符串;

    如果频繁的对大量字符串进行操作,则使用

    1:全局变量或者需要多线程支持则使用StringBuffer;

    2:局部变量或者单线程不涉及线程安全则使有StringBuilder.

    补充:String对象的intern方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String对象的equals结果是true),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用.


    关键词:济南java培训

上一篇:java常见基础面试题集锦
下一篇:java常见面试题

马上预约七天免费体验课

姓名:

电话:

java常见面试题

济南java培训班经典基础题目

java常见基础面试题集锦

选择城市和中心
贵州省

广西省

海南省

达内教育

有位老师想和您聊一聊