JAVA基础-类型转换

隐式类型转换

当两种数据类型兼容,且转换前的数据类型的取值范围小于转换后的数据类型的取值范围,Java 会自动进行类型转换。

1.比int小的数据类型进行运算的时候 ,都提升为int类型去运算。

public class Demo {
    public static void main(String[] args){
        byte a = 10;
        short b = 20;
    
        //byte c = a + b;  //编译报错,因为 a+b 的结果是int类型,如需要byte类型,需要强制转换运算结果                    
        byte c = (byte) (a + b) ;
        int d = a + b;
        System.out.println(c + "\n" + d);
    }
}

2.比 int 大的数据类型进行运算的时候, 小范围数据类型会自动转为大范围数据类型。

public class Demo {
    public static void main(String[] args) {
        long a = 100L;
        double b = 3.14;
        
        //long c = a + b; 报错                   
        double c = a + b; // long类型数据与double类型数据进行运算,long类型自动转换为double类型。
        System.out.println(c);

        
    }
}

强制类型转换

当需要将取值范围大的数据类型转换为取值范围小的数据类型,或者将不兼容的数据类型进行转换时,需要使用强制类型转换,强制类型转换可能会导致数据精度丢失。

public class Demo {
    public static void main(String[] args) {
        // 1. 从 double 到 int 的强制类型转换
        double a = 3.142222222222;
        int b = (int) a;
        System.out.println("double 类型的值: " + a);
        System.out.println("强制转换后的 int 类型的值: " + b);


        //2. 从 byte 到 int 的强制类型转换
        int c = 300;
        byte d = (byte) c;
        System.out.println("原始的 int 值: " + c);
        System.out.println("强制转换后的 byte 值: " + d);

        /*输出结果:
            double 类型的值: 3.142222222222
            强制转换后的 int 类型的值: 3
            原始的 int 值: 300
            强制转换后的 byte 值: 44
       */
    }
}

注意

1.整型强制转换精度丢失主要与取值范围(二进制转换)有关。

     例如上面代码示例int转byte,转换过程如下:

           int类型32bit,300二进制表示为0000 0000 0000 0000 0000 0001 0010 1100

           byte类型8bit,因此int强转byte只会取低8位0010 1100,十进制表示为44

2.boolean数据类型不参与任何数据类型转换。

3.浮点型强制转换整型时,会直接舍弃小数部分。

常量优化机制

Java 编译器会对由常量组成的表达式进行计算,并将计算结果直接替换原表达式,而不是在程序运行时再进行计算。这里的常量可以是字面常量,如0、3.14、'A'、"Java",也可以是使用final修饰的常量变量。

基本数据类型的常量表达式:当表达式中的所有操作数都是常量时,编译器会对其进行优化。

public class Demo {
    public static void main(String[] args) {
        
                
        byte a = 100 + 20; // 常量优化机制。
        System.out.println(a);

        long b= 10000000000L + 20000000000L;
        System.out.println(b);

        
    }
}

字符串常量拼接:对于字符串常量的拼接操作,编译器会在编译时将其合并为一个字符串常量。

public class Demo {
    public static void main(String[] args) {
        String str = "Hello" + " World";
        System.out.println(str);

        final String str1 = "Java";
        final String str2 = " Test";
        String str3 = str1 + str2;
        System.out.println(str3);

    }
}

特殊类型转换

基本数据类型转字符串:可以使用String.valueOf()方法或者直接使用“+”与空字符串拼接。

字符串转基本数据类型:不同的基本数据类型有对应的包装类的parseXxx()转换方法。

public class Demo {
    public static void main(String[] args) {
        // 1. 基本数据类型转字符串
        int a = 123;
        String str1 = String.valueOf(a);
        String str2 = a + "";
        System.out.println("int 转字符串: " + str1);
        System.out.println("int 转字符串: " + str2);

        // 2. 字符串转基本数据类型
        String str3 = "456";
        int b = Integer.parseInt(str3);
        System.out.println("字符串转 int: " + b);
    }
}

你可能感兴趣的:(java,开发语言)