数据类型转换指的是不同类型数据之间在赋值、运算时的转换,保证数据的一致性,可分为隐式类型转换和显式类型转换,除boolean型外,其他七种基本数据类型都可以进行转换。

隐式类型转换

隐式类型转换也就是自动类型转换,不需要对代码进行处理,可在赋值或运算时实现自动转换。
转换原则:从数据范围小的到数据范围大的进行转换。
byte–>short–>int–>long–>float–>double
char–>int(char只能和int相互转换)
下面看一下程序运行举例:

public class datatype {
    public static void main(String[] args) {
        long num1 = 100L;//声明long类型变量 按照命名规则需要添加L
        long num2 = 100;//默认100的数据类型是int
        System.out.println(num1);
        System.out.println(num2);
        long a = 100;//声明long类型变量 a 其中发生了int-->long自动转换
        float b = a ;//声明float类型变量 b 
        System.out.println(b);
    }
}

java显示转换与隐式转换 java中隐式类型转换_强制转换


可以看到num1、num2、a、b都能编译运行并且无报错,而在num2的声明中,左边是long类型 右边的数据类型是int类型

从 int --> long 符合数据范围从小到大的要求 因此发生了自动类型转换,变量b的数据类型是float 而声明a的变量是long

其中float类型的数据范围是大于long类型的数据范围的,因此这里也发生了自动类型转换。

另外,在自动类型转换中也存在一个特例,把int类型的数据赋值byte,short、char类型也是可以的,只要不超过这三种数据类型的范围即可。

显示类型转换

显示类型转换也称为强制类型转换,需要对代码进行一定的处理。
转换的格式 : 数据类型 数据名称 =(数据类型)需要进行转换的数据值,下面是简单的程序举例:

public class datatype2 {
    public static void main(String[] args) {
        long a = 100L;//声明long类型变量 a
        int b = (int) a;//将a强制转换赋值给int类型变量b
        System.out.println(b);
    }
}

可以看到我先声明了一个long类型变量a,然后将他强制转换赋值给b,这里如果不进行强制转换就会报错,其他类型的强制转换也如例子中进行即可。

补充:

  1. 强制转换一般不推荐使用,在一些情况下会造成精度损失,如long类型的值超出int类型的最大范围时,这个值最大只能是int类型的最大值。
  2. 在使用byte、short、char,进行数学运算时,会转换成数字。
  3. 在byte、short、char类型进行运算时,会首先提升到int类型在进行计算,因此在此过程中需要进行一定的强制转换。
    参考例子:
public class datatype2 {
    public static void main(String[] args) {
        char b = 'A';
        System.out.println(b+1);//输出结果为66
        byte num1 = 40;
        byte num2 = 60;
        int result = num1 + num2;//结果赋值需为int,如果要使用byte需要进行强制转换
        byte result2 = (byte) (num1+num2); //结果赋值为byte 需进行强制转换
        System.out.println(result);
        System.out.println(result2);
    }
}

结果如图:

java显示转换与隐式转换 java中隐式类型转换_强制转换_02