概述
Java当中要求参与的计算数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型转换
int + int ==>int
int + long ==> long +long ==>long
把int转换成long,因为是从小到大,属于自动类型转换,不需要代码的干预
int+long ==>int + int ==> int
把long转成了int,因为是从大到小,属于强制类型转换,必须手动代码干预
数据类型中,两种转换方式:自动类型转换和强制类型转换
1 、自动类型转换
概念:取值范围下的数据或者变量可以直接赋值给取值范围大的变量(小花苗可以栽到大花盆里)
特点:
(1)自动类型转换是自动完成的,不需要代码的干预
(2)byte/short/char类型数据,只要参加运算就会自动转换位int类型
(3)byte、short、char-->int-->long-->float-->double
举例:
有一个byte类型(一个字节)的数字5: 00000101
byte类型自动类型转换成short类型(两个字节):在左侧补充1个字节的0,因为左侧补充的都是0
对原有数据是没有影响的,自动转换的结果仍然是5:00000000 00000101
byte类型自动类型转换成int类型(4个字节)
在左侧补充3个字节的0,因为左侧补充的都是0
对原有数据是没有影响的,自动转换的结果仍然是5:00000000 00000000 00000000 00000101
byte类型自动类型转换成long类型(8个字节)
在左侧补充7个字节的0,因为左侧补充的都是0
对原有数据是没有影响的,自动转换的结果仍然是5:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101
总结:根据需求,在数据面前补充若干个0,因为补充的是0,对原有数据大小是没有影响的
(打脸充胖子)
int a = 1;
byte b = 2;
byte c = a + b; //这个是错误的
=赋值符号右侧发生的变化是这样的:int+int ==> int
=赋值符号左侧使用的是byte类型来接受int类型的赋值,会发生类型不兼容
所以正确的做法是
int c = a+b;
int = int + byte ==> int +int ==>int
int a = 1;
double b = 0.5;
int c = a+ b;
int = int +double ==> double + double ==>double
=赋值符号右侧:最终饭就的结果是double类型(8个字节)
=赋值符号左侧:使用int类型(4个字节)来double(8个字节)类型的数据,类型不兼容
所以正确的做法是
double c = a + b;
2 、强制类型转换
概念:从大到小强制转换
取值范围大的数据或者变量不能直接赋值给取值范围小的变量,所以需要手动代码干预
解决办法:
(1)把坑变大:把被赋值对象的类型变大
(2)把花苗变小:强制类型转换
格式:
转后类型变量名称 = (转后类型)转前数据或者变量:
long类型的数字5转成int类型
long num = 5L;
long类型(8个字节)的数据或者变量赋值给int(4个字节)的变量,使用了强制转换
让赋值符号左右两侧数据类型一致,向左侧类型看齐
int a = (int)num;
举例:
有一个long类型(8个字节)的数字5:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000101
long类型强制类型转换成int类型(4个字节):
砍掉左侧的4个字节的内容,因为砍掉的都是数字0,所以最终的结果没有影响,仍然是5
00000000 00000000 00000000 00000101
long类型强制类型转换成short类型(2个字节):
砍掉左侧的6个字节的内容,因为砍掉的都是数字0,所以最终的结果没有影响,仍然是5
00000000 00000101
long类型强制类型转换成byte类型(1个字节):
砍掉左侧的7个字节的内容,因为砍掉的都是数字0,所以最终的结果没有影响,仍然是5
00000101
总结:
根据需求,砍掉数据左侧的若干个字节的内容,只要砍掉的都是0,对原数据没有影响
但是,只要砍掉的数据中包含1,就会对原数据产生影响(可能会损失精度)
举例:
int num = 6000000000L;
60亿强制转换成int类型,从大到小的转换,需要进行强制类型转换
因为int类型的取值范围最大是21亿,所以势必会造成数据精度缺失
缺失的过程是这样的:
00000000 00000000 00000000 00000001 01100101 10100000 10111100 00000000
01100101 10100000 10111100 00000000
-->1705032704
2.2 ASCII码表
计算机里面只能识别0和1,所以我们存储到计算机中的所有内容都会转换成0和1进行存储
问题:如何把字符转换成0和1呢?
通过ASCII表:存储字符和数字对应关系的一张表
存储字符时:需要查找ascii码表,找到字符相应的数字,将数字转换成二进制放到计算机中
'A'--> 65 ----> 01000001 大写字母是连的,ASCII编码值依次+1
'a'--> 95 ----> 01011111 小写字母是连的,ASCII编码值依次+1
'0'--> 48 ----> 00110000 数字字符是连的,ASCII编码值依次+1
使用字符时,将对应的二进制转换成十进制,找到ASCII码表中对应的字符
最后
以上就是俭朴草丛为你收集整理的数据类型转换1 、自动类型转换2 、强制类型转换的全部内容,希望文章能够帮你解决数据类型转换1 、自动类型转换2 、强制类型转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复