多语言展示
当前在线:579今日阅读:26今日分享:39

java基本数据类型的自动和强制转换区别

学习java的时候,对java的基本数据类型的隐式转换和强制转换有时会有些混乱,不好区分,下面就针对它们的区别作出一个详解。
工具/原料
1

jdk开发工具

2

eclipse集成环境软件

方法/步骤
1

基本数据类型:byte,short,int,long,float,double,char,boolean,四类八种。①整型:byte,占1字节内存,范围为-127~128。short,占2字节内存,范围~为-32768~32767。int,占4字节内存,范围为约-21亿~21亿,具体为-2147483648~2147483648。long,占8字节内存,范围为-2^63~2^63-1。②浮点型:float,占4字节内存,范围为-3.403E38~3.403E38。double,占8字节内存,范围为-1.798E308~1.798E308。③字符型:char,占2字节内存,表示一个字符,如(‘A’,‘a’,‘国’),范围为整个Unicode字符集 。④布尔型:boolean,占1字节内存,只有两个值true和false。

2

1、自动(隐式)数据类型转换:将取值范围小的类型自动提升为取值范围大的类型 。byte、short、char 运算时直接提升为 int 。boolean类型不能发生数据类型转换。整型数据类型默认是int类型。浮点型数据类型默认是double类型。byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double。(1)①int类型和byte类型运算,结果是int类型,byte类型自动提升为int类型。          int a = 1; byte b = 2;         // byte x = a + b; // 报错,byte类型装不下int类型        int y = a + b;  //int+byte-->int+int-->int            System.out.println(y);//3②int类型和double类型运算,结果是double类型,int类型会提升为double类型 。         int i = 1; double d = 2.5;          //int e =d+i;  //报错,int类型装不下double类型         double e = d+i; //int+double-->double+double-->double         System.out.println(e); //3.5

3

(2)①左边是double类型,右边是float类型,左右不一样。        double num = 2.5F;// float --> double,符合从小到大的规则,自动转换。        System.out.println(num); // 2.5②赋值时,右侧的数值大小不能超过左侧的类型范围。        byte num4 = 40; // 注意!右侧的数值大小不能超过左侧的类型范围        byte num5 = 50;// byte + byte --> int + int --> int        int result1 = num4 + num5;        System.out.println(result1); // 90 ③浮点型之间的运算可能不太准确。        float a = 1.1F; float b = 2.2F;        //int i = a + b; // 报错,int类型装不下double类型        float i = a+b;        System.out.println(i);//3.3000002

4

(3)char 运算时直接提升为 int 。 计算机的底层会用一个数字(二进制)来代表字符A,就是65。一旦char类型进行了数学运算,那么字符就会按照一定的规则翻译成为一个数字。       char c= 'A'; // 这是一个字符型变量,里面是大写字母A       System.out.println(c + 1); // 66,也就是大写字母A被当做65进行处理。char+int-->int+int-->int。

5

2、强制类型数据转换:将取值范围大的类型强制转换成取值范围小的类型 。强制转换的格式:数据类型 变量名 = (数据类型)被转数据值; 强制转换的注意事项:如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同 。(1)浮点转成整数,直接取消小数点,可能造成数据损失精度。       //int a = 1.5; // 错误       int a = (int)1.5;//正确,不会四舍五入,小数点后面的数据直接舍去,a 的值变为1。//double-->int       System.out.println(a); //1

6

(2)①int 强制转成 short 砍掉2个字节,可能造成数据丢失。        int b =(int)2.3;//b的值为2        short c =1;        //c =b+c; //错误         c=(short)(b+c);//编译成功//int +short-->int+int-->short+short-->short         System.out.println(c); //3②赋值时,右侧的数值大小不能超过左侧的类型范围,超出会报错,进行强转后不报错,但数据会溢出、丢失。        byte num1 = (byte)4000; //数据超出byte范围        byte num2 = 50;        int result= num1 + num2;        System.out.println(result); // -46,数据出现异常

7

(3)左边是int类型,右边是long类型,不一样,long --> int,不是从小到大,需强转为int类型。         int num = (int)30L;         System.out.println(num);// 30

8

(4)int强制转换为short:注意必须保证逻辑上真实大小本来就没有超过short范围,否则会发生数据溢出。       byte num1 = 40;       short num2 = 60;       short result = (short) (num1 + num2);// byte + short --> int + int --> int       System.out.println(result); // 100

注意事项

希望此经验对您有用!

推荐信息