[JavaSE笔记]Java中易被忽视的一些问题

来源:互联网 发布:网络招商怎么精准找到 编辑:程序博客网 时间:2024/06/05 10:08
1. byte b1=3,b2=4,b=0;
    b=b1+b2;
    b=3+4;
    哪句是编译失败的呢?为什么?
答:b=b1+b2;编译失败
       b1+b2的结果是int类型,无法直接赋值给byte类型的b,需要进行强制类型转换。byte b=(byte)(b1+b2);
      常量相加-->计算结果—>检验结果是否在该类型的数值范围内
      变量相加—> 进行默认转换-->看接受的数据类型范围和结果是否匹配
      Boolean类型是不会转成其他类型的,byte,short,char之间不转换,但一旦参与运算就会转换-->int- - - - ->long-float-double

2. float f1=(float) 12.345;
    float f2=12.345f;
    这两个定义有没有区别?
答:f1其实是将一个double类型的变量12.345强制转换为float类型。
       f2其实就定义了一个float类型。

3. byte b=130;这个语句有没有问题?如果想赋值正确,可以怎么做?
答:有问题。byte的取值范围是:-128~127,130超出了这个范围。
       可以改为 byte b=(byte)130; 输出结果为 -126
       -126的来历如下:
       先将130从十进制转换成二进制
       最高符号位                                           数据类型
               0                          0000000 00000000 00000000 10000010
       计算机底层使用补码运算,正数的原、反、补码相同,进行强制类型转换后,得到了一个补码10000010。
       根据这个补码算出原码为11111110,也就是十进制的-126。

4. short s=1;s=s+1;
    short s=1; s+=1;
这两行代码有没有问题?
答:第一行有问题,需要进行强制类型转换,s=(short)(s+1);
       第二行代码没有问题,s+=1;隐含了一个强制类型转换,它不等于s=s+1;


5. &&和&的区别?
答:共同特点:都表示并列关系
       逻辑双与&&的特点:连接的两个表达式,如果前一个表达式是false,则后面不执行,具有短路效果。
       逻辑单与&的特点:有false则false,没有短路效果。
      【|与||的区别与此类似】


6. 定义两个变量,让他们的值进行互换。
答:方法一:
       使用位异或^ (位异或运算进行偶数次还是其本身)
a=a^b;b=a^b;//b=a^a^b;a=a^b;//a=a^b^a;

        方法二:
        引入第三方变量
int t=a;a=b;b=t;




7. If语句可以实现判断两个数据的最大值,而三元运算符也可以,那么他们两个有什么具体的区别呢?
答:使用if语句实现的不一定能用三元运算符实现;使用三元运算符实现的一定能用if语句。
       三元运算符针对的是一个具体的结果,而不是一个语句(输出语句)。
        If语句可以针对是具体的结果(两个数据的最大值),也可以是一个数据输出。


8. Switch语句后面的表达式可以跟什么样的数据类型?
答:可以跟byte、short、char、int类型
       Jdk1.5以后还可以跟枚举类型;
       Jdk1.7以后还可跟String类型。

9. Switch语句和if语句的区别
答:应用场景不同:
        Switch :针对的是几个常量的判断;
        If语句:针对几个常量进行判断;
                     针对一个范围进行判断;
                     表达式可以使布尔类型。

10. While循环和for循环有什么区别?
答:如果使用循环语句后还想访问循环中的变量,就要用while循环,否则用for 循环。
       for循环的优点:for循环执行完成后,变量会从内存中消失;
       针对应用场景来看的话,如果循环次数明确,使用for循环,否则使用while循环。

11. do-while循环和for循环、while循环的区别
答:最主要的区别:do-while的循环体语句至少循环一次;
        for循环在内存上优于while循环,一般不知道是用什么循环时,用for循环不会错。