[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. 定义两个变量,让他们的值进行互换。
答:方法一:
使用位异或^ (位异或运算进行偶数次还是其本身)
方法二:
引入第三方变量
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循环不会错。
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循环不会错。
阅读全文
0 0
- [JavaSE笔记]Java中易被忽视的一些问题
- 容易被忽视的一些PHP问题
- Java中不能忽视的问题
- java 学习中容易忽视的问题!!
- java 学习中容易忽视的问题!!
- java 学习中容易忽视的问题!!
- 我忽视的一个java Integer 问题
- java中一个容易忽视的问题
- javase输入输出流易被忽视的细节
- Java基础篇笔记(二) ---容易忽视的表达式结果的类型,求概率、几率问题
- [转]网页制作中一些容易被忽视的问题
- Java中一些常被忽视的特性
- Java中一些常被忽视的特性
- 细节决定成败,浅析一些容易被忽视的Java关键字
- 很容易忽视的问题
- 容易忽视的一些细节
- java学习笔记--易忽视的情况 (1)
- 笔记有关Java的一些问题
- 史上难得的自定义效果——屏幕中随机出来十个头像不重叠
- 替换字符串中的空格
- Java中使用Jedis操作Redis
- Jenkins SDK does not exist for mac
- 第四次零售革命离不开零售大数据分析
- [JavaSE笔记]Java中易被忽视的一些问题
- java生成数字001到999的2种方法
- Ueditor无法回显html
- Python Cookbook(第2版)中文版
- C++ 结构体在内存中的对齐规则
- 注册页面的服务器校验和登录
- 插入排序【直接插入排序和希尔排序】
- SVN版本控制工具的使用
- 简单关闭windows自动更新