您的位置:首页 > 编程语言 > Java开发

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

2017-07-19 13:24 239 查看
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循环不会错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java