美文网首页The Magnificent JavaIT图文在线课程JAVA学习
Java程序员笔试必备--基本类型与运算

Java程序员笔试必备--基本类型与运算

作者: 极客学院Wiki | 来源:发表于2015-09-21 12:22 被阅读230次

    电子书下载地址: http://wiki.jikexueyuan.com/project/java-interview-bible/

    1. 说说 & 和 && 的区别。

    & 和 && 都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true 时,整个运算结果才为 true,否则,只要有一方为 false,则结果为 false。

    && 还具有短路的功能,即如果第一个表达式为 false,则不再计算第二个表达式,例如,对于 if(str != null&& !str.equals(“”)) 表达式,当 str 为 null 时,后面的表达式不会执行,所以不会出现 NullPointerException 如果将 && 改为 & ,则会抛出NullPointerException 异常。If(x==33 & ++y>0) y 会增长, If(x==33 && ++y>0) 不会增长。

    & 还可以用作位运算符,当 & 操作符两边的表达式不是 boolean 类型时,& 表示按位与操作,我们通常使用 0x0f 来与一个整数进行 & 运算,来获取该整数的最低 4 个 bit 位,例如,0x31 & 0x0f 的结果为 0x01。

    备注:这道题先说两者的共同点,再说出 && 和 & 的特殊之处,并列举一些经典的例子来表明自己理解透彻深入、实际经验丰富。

    2. 用最有效率的方法算出 2 乘以 8 等於几?

    2 << 3,因为将一个数左移 n 位,就相当于乘以了 2 的 n 次方,那么,一个数乘以 8 只要将其左移 3 位即可,而位运算 cpu 直接支持的,效率最高,所以,2 乘以 8 等於几的最效率的方法是 2 << 3 。

    3. 存在使 i + 1 < i的数吗?

    答案:存在

    解析:如果 i 为 int 型,那么当 i 为 int 能表示的最大整数时,i+1 就溢出变成负数了,此时不就 <i 了吗。

    扩展:存在使 i > j || i <= j 不成立的数吗?

    答案:存在

    解析:比如 Double.NaN 或 Float.NaN 。

    4. 0.6332 的数据类型是()

    A. float
    B. double
    C. Float
    D. Double

    答案:B

    解析:默认为 double 型,如果为 float 型需要加上f显示说明,即 0.6332f

    5. System.out.println("5" + 2);的输出结果应该是()。

    A. 52
    B. 7
    C. 2
    D. 5

    答案:A

    解析:没啥好说的,Java 会自动将 2 转换为字符串。

    6. 下面的方法,当输入为 2 的时候返回值是多少?

        public static int getValue(int i) {
            int result = 0;
            switch (i) {
            case 1:
                result = result + i;
            case 2:
                result = result + i * 2;
            case 3:
                result = result + i * 3;
            }
            return result;
        }
    

    A. 0
    B. 2
    C. 4
    D. 10

    答案:D

    解析:注意这里 case 后面没有加 break,所以从case 2开始一直往下运行。

    7. float f=3.4;是否正确?

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

    8. int 和 Integer 有什么区别?

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

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

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

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

    package com.lovo;  
      
    public class AutoUnboxingTest {  
      
        public static void main(String[] args) {  
            Integer a = new Integer(3);  
            Integer b = 3;              // 将3自动装箱成Integer类型  
            int c = 3;  
            System.out.println(a == b); // false 两个引用没有引用同一对象  
            System.out.println(a == c); // true a自动拆箱成int类型再和c比较  
        }  
    }  
    

    9. char 型变量中能不能存贮一个中文汉字?为什么?

    答:char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节(16bit),所以放一个中文是没问题的。

    补充:使用 Unicode 意味着字符在 JVM 内部和外部有不同的表现形式,在 JVM 内部都是 Unicode,当这个字符被从 JVM 内部转移到外部时(例如存入文件系统中),需要进行编码转换。所以 Java 中有字节流和字符流,以及在字符流和字节流之间进行转换的转换流,如 InputStreamReader 和 OutputStreamReader,这两个类是字节流和字符流之间的适配器类,承担了编码转换的任务;对于 C 程序员来说,要完成这样的编码转换恐怕要依赖于union(联合体/共用体)共享内存的特征来实现了。

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

    答:Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法返回与参数 最接近的长整数,参数加 1/2 后求其 floor

    相关文章

      网友评论

        本文标题:Java程序员笔试必备--基本类型与运算

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