JavaSE之隐式转换、强制转换

课前小例


package com.zpwd.chapter1_0225;

public class TypeChange {
public static void main(String[] args) {
    // 类型转换
    // 1.自动类型转换:两种类型彼此兼容,目标的取值范围大于原型
    byte num1 = 12;
    short num2 = num1;
    int num3 = num2;
    long num4 = num3;

    // 2.强制类型转换:(1)两种类型彼此兼容(不能跨大类型),但目标类型取值范围小于原类型(强转有风险,用时需谨慎)
    long a1 = 128;
    int a2 = (int) a1;
    short a3 = (short) a2;
    byte a4 = (byte) a3;
    System.out.println(a1);
    System.out.println(a2);
    System.out.println(a3);
    System.out.println(a4);// 溢出、损失精度:-128

    // 运算的兼容:向范围大的方向兼容:byte ,char,shory,int运算时,兼容方向是int。
    long l1 = 10;
    int l2 = 20;
    // int l3 = l1 + l2; //该种写法报错
    int l3 = (int) (l1 + l2);

    byte num11 = 9;
    short num12 = 10;
    // short num13 = num11+num12;//报错,因为num11+num12得到的类型是int
    short num13 =(short) (num11+num12);
    
    //当double类型的变量强转成int时,默认为取整
    //面试题:short s1= 99;s1 = s1+2;与s1+=2 有什么区别?
    // s1+2 得到的是int类型,给s1重新赋值时,必须强转成int
    // 而s1+=2 不需要强转
    }
}

转换类型:隐式转换(自动类型转换)、强制类型转换

隐式转换:两种类型彼此兼容,范围小的类型转成范围大的类型。

byte 可以自动转换成 short 、int 、long
short 可以自动转换成 int 、long
int 可以自动转换成 long

强制类型转换:两种类型彼此不兼容(描述并不准确),范围大的类型转成范围小的类型。

long 强制转换成 int 、short 、byte

注意:

  • 强制转换成什么类型,就要在前面加(小范围类型),例如(int)、(short)、(byte)
  • double类型的变量强制转换成int类型的变量时,默认为取整。
  • 运算兼容类型:byte ,char,shory,int,他们在做运算时,全部向int类型兼容。例如:btye类型变量+char类型变量 = int类型变量。

面试题

short s1= 99;
s1 = s1+2;
该种写法是否正确,正确的写法与s1+=2有何区别?

  • 该种写法不正确,s1 是short类型,因为byte ,char,shory,int他们属于兼容类型,short类型变量+int(默认)2 = int,而int变量赋值给short时,因为范围变小,需要强制转换。
    正确写法:
    short s1= 99;
    s1 = (short)(s1+2);
    而s1+=2 是不需要强制转换的。

你可能感兴趣的:(JavaSE之隐式转换、强制转换)