byte与short之间的转换,不是很懂?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了byte与short之间的转换,不是很懂?相关的知识,希望对你有一定的参考价值。
比如:
byte a=20;
short b = a+10;为什么会报错
这样写就不会有问题:short b =(short)(a+10);或者:short b =(byte)(a+10)
我想知道为什么低精度专高精度时变量与整数不能相加。
像10,20, 21, 100,1212……这样的常数,默认类型为int。
回到你的问题,按照上述默认规则,
1)表达式 a + 10 的运算结果20,类型为int
2)将类型为int,结果20的值,赋值给类型为short的变量b,就会出现问题!
3)如果用(short)(a+10),那么表达式的值20,类型为short。这时赋值给b就没有问题;
4)如果用(byte)(a+10),那么表示的值为20,类型为byte。这时赋值给b也不会有问题; 参考技术A (1)short b=a+10;中,10默认为int类型,a为byte类型,表达式中含有byte、short、char型数据运算时,java首先会将变量自动转换成int型,然后进行计算。所以a会转换为int类型,两个int类型相加结果为int类型,short类型低于int类型,用short类型接收会出现错误。(2)short b =(short)(a+10) ;通过强转成为short类型。(2)short b =(byte)(a+10);强转为byte类型,short类型高于byte类型,byte类型可以自动转换为short类型。
自动类型转换规则如图。
自动类型转换规则
数据类型转换
数据类型的转换1.定义
数据在不同类型之间进行转换,boolean类型不参与转换
2.默认转换
A:从小数据到大类型
B:byte,short,char --> int long float double
C:byte,short,char之间是平级的,不相互转换,直接转成int类型参与运算。
3.强制转换
A:从大到小
B:可能会有精度的损失,一般不建议这样使用。
C:格式:
目标数据类型 变量名 = (目标数据类型) (被转换的数据);
4.思考题和面试题:
A:下面两种方式有区别吗?
float f1 = 12.345f;
float f2 = (float)12.345;向下类型转换,浮点数默认是double类型
B:下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
short s1=3;
short s2=3;
short s3=s1+s2;
char c1=3;
char c2=4;
char c3=c1+c2;
byte、short、char在运算时,会自动向上转型为int型,所以返回的结果是int类型,而接收的类型均不是int,由于
类型不匹配,所以报错
byte b4 = 3 + 4;
short s=3+4;
常量进行计算后的值,预编译时能够判断其是否超出范围
int a=1;
int b=2;
int c=a+b;
long l1=3l;
long l2=3l;
long l3=l1+l2;
float f1=2.3f;
float f2=2.3f;
float f3=f1+f2;
double d1=3.7;
double d2=3.9;
double d3=d1+d2;
均不会报错,java进行了优化。
C:下面的操作结果是什么呢?
byte b = (byte)130;
D:字符参与运算
是查找ASCII里面的值
‘a‘ 97
‘A‘ 65
‘0‘ 48
空格 32
System.out.println(‘a‘);
System.out.println(‘a‘ + 1);
E:字符串参与运算
这里其实是字符串的连接
System.out.println("hello"+‘a‘+1);
System.out.println(‘a‘+1+"hello"); System.out.println("5+5="+5+5); System.out.println(5+5+"=5+5");
运行结果:helloa1
98hello
5+5=55
10=5+5
以上是关于byte与short之间的转换,不是很懂?的主要内容,如果未能解决你的问题,请参考以下文章
java 变量数据类型转换?byte, short, char, int, long, float, double
byte数组与int,long,short,byte转换 (转载)