欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基本数据类型转换

程序员文章站 2022-07-15 17:05:43
...

研究问题:

  1. 基本数据类型中数值类型的自动类型提升?
  2. 基本数据类型中的数值类型强制转换??
  3. 进行数学运算时的数据类型自动提升与可能需要的强制类型转换???

要点:


  • 基本数据类型转换
  • 双目运算符隐含了强制类型转换符
    byte a=3,b=4;
    a=(byte)(a+1)//等同于a+=1;

截图展示区:

    1.
package com.corn.testcast;


public class TestCast {

    public static void main(String[] args) {
        byte a = 1000;   // 编译出错 Type mismatch: cannot convert from int to byte
        float b = 1.5;   // 编译出错 Type mismatch: cannot convert from double to float
        byte c = 3;      // 编译正确
    }

}

对于byte c = 3; // 编译正确
jvm在编译过程中,对于默认为int类型的数值时,当赋给一个比int型数值范围小的数值类型变量(在此统一称为数值类型k,k可以是byte/char/short类型),会进行判断,如果此int型数值超过数值类型k,那么会直接编译出错因为你将一个超过了范围的数值赋给类型为k的变量,k装不下嘛,你没有进行强制类型转换,当然报错了。但是如果此int型数值尚在数值类型k范围内,jvm会自定进行一次隐式类型转换,将此int型数值转换成类型k。

    2.
package com.corn.testcast;

public class TestCast {

    public static void main(String[] args) {
        byte p = 3; // 编译正确:int到byte编译过程中发生隐式类型转换
        int  a = 3;
        byte b = a; // a为变量,用a赋值其他变量时发生在运行期,为保证操作安全,编译就出错:cannot convert from int to byte
        byte c = (byte) a; // 编译正确
        float d = (float) 4.0;
    }

}
    3.
package com.java.accuracy;

public class DataTypeDemo {
    public  static void main(String[] args){
        byte a=3,b=4,c;
        int d=5;
        c=(byte)(a+b);
//      c=3+4;
//      b=d;//编译报错
        byte e=(byte) 130;

        /*
         * 130默认为int类型,在内存中占4个字节,每个字节占8位
         * 所以对应的二进制为:
         *      00000000  00000000  00000000  10000010
         * 正数:原码=反码=补码
         * 
         * 强制类型转换时,将进行截取操作:
         *      10000010(新补码)
         * 
         * 由类型转换后得到的新补码求出原码:
         * 补码       1(符号位)      0000010(数值位)
         * 反码       1           0000001     
         * 原码       1           1111110
         *  转换成二进制为-126
         */

        System.out.println(c);
        System.out.println(e);
    }
}

运行结果:
基本数据类型转换

相关标签: 类型转换