# 基本数据类型的更多语法点

# 自动类型转换

  • java 会自动帮我们把低精度转换为高精度
  • 不会出现问题的类型转换,变成语言可以做自动类型转换,比如低精度的数字向高精度数字转换
  • 自动类型转换可以发生在算数运算,也可以发生在赋值

# 数值精度顺序

double -> float -> long -> int -> short -> byte

举个例子:

public class AutoConvert {
  public static void main(String[] args) {
    int intVal = 99;
    // 自动类型转换 int -> long
    long longVal = intVal;
    System.out.println(longVal);

    // 自动类型转换 float -> double
    float floatVal = 11.32f;
    double doubleVal = floatVal;
    System.out.println(doubleVal);
  }
}

提示

java 中, int 类型除以 int 类型, 得到的还是 int 类型

比如:

int a = 99;
int b = 5;
System.out.println(a / b); // 19

int a = 99;
double b = 5;
System.out.println(a / b); // 19.8

# char 可以转为 int

  • char 可以转换为 int
  • 虽然同样是两个 byte,但是因为 char 是无符号数,值域超出了 short 可以表示的范围,所以不可以自动转为 short

举个例子:

char ch = 'A';
int chNum = ch;
int chNumCalc = ch + 10;
System.out.println(ch); // A
System.out.println(chNum); // 65

# 强制类型转换

  • 可能出现问题的类型转换,需要使用强制类型转换, 比如高精度数值向低精度数值转换
  • 强制类型转换也是操作符
  • 语法是用小括号括起来的目标类型放在被转换的值前面
  • 强制转换会造成数据精度丢失

举个例子:

public class AutoConvert {
  public static void main(String[] args) {
    int intVal = 99;
    // 自动类型转换 long -> int
    long longVal = 19999;
    intVal = (int) longVal;
    System.out.println(intVal);

    // 自动类型转换 double -> float
    float floatVal = 11.32f;
    double doubleVal = 3344.4334;
    System.out.println(doubleVal);

    int a = 65;
    char b = (char) a;
    System.out.println(b); // A
  }
}