java面试题疏忽点记录

1.包装类型(wrapper class)

  • 原始类型: boolean,char,byte,short,int,long,float,double
  • 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
public class Test03 {

    public static void main(String[] args) {
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;

        System.out.println(f1 == f2);
        System.out.println(f3 == f4);
    }
}

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

2.&(逻辑与)和&&(短路与)的区别?

答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行(被短路掉了)字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短 路或运算符(||)的差别也是如此。

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

答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。
12、用最有效率的方法计算2乘以8?
答: 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。
2的二进制表示法左移3位,2的二进制应该是0000 0010,左移3位后0001 0000,再转成十进制就是2^4=16

3.静态内部类面试题 - 下面的代码哪些地方会产生编译错误?

package text;

class Outer {

    //非静态内部类会报错,static静态内部类则不会报错
    class Inner {}
/*
 * 注意:Java中    非静态内部类对象(也就是Inner)的创建    要依赖其    外部类对象(没有Outer,就没有Inner),
 * 静态内部类对象(static Inner)的创建,则无需依赖外部类对象
 * 上面的面试题中foo和main方法都是 静态方法,静态方法中没有this,也就是说没有所谓的  外部类对象,因此无法创建  内部类对象,
 * 如果要在静态方法中创建内部类对象,可以这样做:new Outer().new Inner();
 */
    public static void foo() { new Inner(); }//报错

    public void bar() { new Inner(); }

    public static void main(String[] args) {
        new Inner();//报错
    }
}

4、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

答:都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。

5、阐述静态变量和实例变量的区别。

答:静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存
用处:在Java开发中,上下文类工具类中通常会有大量的静态成员。

6、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

答:不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在调用静态方法时可能对象并没有被初始化。

猜你喜欢

转载自blog.csdn.net/jae_peng/article/details/80150973