长春网站公司哪家好,做网站的证书,北京seo关键词优化外包,管理咨询公司的信息获取渠道Java中的数据类型和C的数据类型基本是一致的#xff0c;本来以为不需要怎么看#xff0c;后来发现还是有些地方需要好好总结一下。 基本的就不说了#xff0c;直接上干货。 我总结了下#xff0c;数据类型的转换和赋值有以下几点是比较麻烦的#xff1a; 1、整数直接量可以… Java中的数据类型和C的数据类型基本是一致的本来以为不需要怎么看后来发现还是有些地方需要好好总结一下。 基本的就不说了直接上干货。 我总结了下数据类型的转换和赋值有以下几点是比较麻烦的 1、整数直接量可以直接赋值给byte,short,char但不能超出范围。 1 byte a1127;//编译正确
2 byte a2128;//会报错 Type mismatch: cannot convert from int to byte
3 short a332767;//编译正确
4 short a432768;//会报错 Type mismatch: cannot convert from int to short
5 char a565535;//编译正确
6 char a665536;//会报错 Type mismatch: cannot convert from int to char 从上面可以看出证书直接量只要不超过byte、short、char的范围是可以直接对其进行赋值的。值得注意的是char和short虽然都是16位但是char是无符号范围为0~65535而short是有符号范围为-32768~32767。 2、同种类型的变量互相赋值即使赋值右侧值是超出其数据类型范围的编译器同样不会报错而是会截取低位。 1 byte a1127;
2 byte a2(byte)(a11);
3 System.out.println(a2); 以上代码运行结果为-128.原因是1271128超出了byte的范围-128~127作为一个闭环127后面一个数应该是-128。实际上就是再加1位数不够了重新截取后为128不过是补码 至于为什么要在a11之前用byte后面会有总结。 3、不同种类的变量互相赋值小的数据类型会自动转换为大的数据类型数据类型从小到大依次为byteshort(char)intlongfloatdouble其中short和char由于都是两个字节因此其数据类型的大小是相同的。还有一点需要提一点的是第2点同样适用于第三点赋值右侧的值超出左侧数据类型的范围编译器不会报错而是会截取低位。 1 byte byteType100;
2 short shortTypebyteType;
3 int intTypeshortType;
4 long longTypeintType;
5 float floatTypelongType;
6 double doubleTypefloatType; 上述代码都是正确的都是从小类型自动转换为大类型。 但是 1 char charTypebyteType;//报错 Type mismatch: cannot convert from byte to char
2 charTypeshortType;//报错 Type mismatch: cannot convert from short to char
3 shortTypecharType;//报错 Type mismatch: cannot convert from char to short
4 intTypecharType;//编译正确 可以看出char在自动转换过程是有特殊情况的byte数据类型虽然没有char数据类型大但是它不能自动转换char和short一样大也不能进行自动转化char继续往上就可以自动转换了。 4、byte,short,char型数据参与运算时先一律转换为int再运算 1 byte a1100;
2 byte a2;
3 a2100*1;//编译正确
4 a2100*6;//报错 Type mismatch: cannot convert from int to byte
5 a2a11;//报错 Type mismatch: cannot convert from int to byte
6 a2(byte)(a11);//编译正确 从第3行和第4行可以看出当赋值侧右侧为直接量的运算那么右侧仍然算直接量那么规则和1一样只要不超出赋值左侧范围即可。 当赋值侧右侧有变量参与运算那么无论是-*/都会先将运算符两侧的数据转换为int再进行运算得到的结果也自然是int当把int转换为byte、short或者char时自然需要强制转换。 转载于:https://www.cnblogs.com/haojiejiejie/p/8583598.html