[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. 定义两个变量,让他们的值进行互换。
答:方法一:
使用位异或^ (位异或运算进行偶数次还是其本身)
方法二:
引入第三方变量
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循环不会错。
相关文章推荐
- java学习笔记二——一些基本问题
- 笔记有关Java的一些问题
- Javasvript中一些奇怪的问题(JS笔记)
- Java基础篇笔记(二) ---容易忽视的表达式结果的类型,求概率、几率问题
- 笔记有关Java的一些问题
- java第5天的 课堂笔记 一些基本问题
- 大三下学期开学.近期linux,java,eclipse一些小问题的笔记.
- 【JavaSE笔记】Java常见细节性问题(三)_二维数组
- 【JavaSE笔记】Java常见细节性问题(一)
- JAVA编码问题的一些理解
- 我需要帮助啊 !!!JAVA的一些问题啊???
- [笔记]3.软件代码中的BUG问题的一些记录
- java 学习中容易忽视的问题!!
- [转]网页制作中一些容易被忽视的问题
- 学习JAVA一个月来,所遇到的一些问题(不全)
- 关于初学JAVA里的一些问题!
- java环境变量设置即一些问题的解决
- JAVA学习中应该注意的一些简单问题?
- 一些Java经典问题
- java与c/c++进行socket通信的一些问题(2)