Java 基础面试题

问题一 :byte b1 = 3,b2 = 4,b; b = b1 + b2  ;  b = 3 + 4;那句会编译失败,为什么?

解析:byte b1 = 3,b2 = 4,b; 是定义了三个byte类型的变量

        b = b1 + b2; 程序会先将类型转换位int类型,再相加,所以类型出错

        b = 3 + 4 ; 常量,是先计算结果,再看结果是否超出byte范围,超出者报错

总结:两个变量相加,首先要类型w问题 ,常量是先计算,,然后看结果是否在赋值的范围内,在则不报错 b = 

 

问题二 : byte b = 130,有没有问题?如果想让赋值正确,可以怎么做?起结果是多少

解析:计算机的运算都是在补码上进行的,首先要得到补码

   A:获得130的二进制

    00000000 00000000 00000000 10000010

  整数的补码,原码,反码都一样

 

    B :做截取操作,换成byte类型

         10000010    但这是补码

    C : 求出原码

                        符号位             数值位

        补码             1                  0000010

        反码              1                 00000001

       原码               1                  1111110

所以结果为-126

 

问题三 : short s = 1 ; s = s+1;  与short s = 1; s+=1;

两个代码有没有问题,为什么?

解析:

      扩展的赋值运算其实隐含了一个强制类型转换

    s += 1;等价于 s = (s的数据类型)(s+1);

 

问题四:交换两个数据的值

     A:用中间变量去接受

     B: 用位异或实现,一个数据与另一个数据异或两次,等于自己

     C :用变量相加

     D: 一句话搞定    b = (a+b) -(a =b)  

 

问题五:byte ,long ,String 可以作为switch的表达式吗?

byte可以    long不行    String在JDK7之后可以

posted @ 2017-02-13 23:47  风雨彩  阅读(226)  评论(0)    收藏  举报