• 开始之前我们先合上笔记本压压枪,不对,压压惊!
  1. 在JAVA中,基本类型(除了boolean外)可以自动转换
  2. 转换形式为:(byte,short,char) --> int --> long --> float --> double 这就是自动转换的顺序
  3. byte,short,char类型的数据在运算时是自动转换为int类型进行运算
  4. int,long,float,double类型的数据在运算时会自动将精度低的精度高的数据类型
  5. 也就是说,表述范围小的可以自动转换为表述范围大的,(表述范围不是指类型的大小)其次,如果你要得到某一类型的数值时,也可以通过强制转换来实现。
  6. 隐式类型转换:当由低向高转换时,java会自动使用隐式类型转换(如int型转为long型)
  7. 显式类型转换:当由高向低转换时,java不会自动转换,必须使用显式类型转换,即手动强转(如double型转为float型)
  • 当变量a与变量b数据类型一致时,当数据类型是int类型以上时(参考上面第2点),两种写法都可以
public static void main(String[] args) {
    int a = 1;
    int b = 2;

    a = a + b;
    System.out.println("a:"+a);

    a = 1;
    a += b;
    System.out.println("a:"+a);
}
输出:
a:3
a:3

注:如果a,b都是short类型,或者byte类型,则a = a + b;也是不通过编译的,需要手动强转,参考上面第3、7点
  • 当变量a与变量b数据类型不一致时
  1. a是int类型,b是short类型(a类型范围比b类型大),两种写法都可以
public static void main(String[] args) {
    int a = 1;
    short b = 2;

    a = a + b;
    System.out.println("a:"+a);

    a = 1;
    a += b;
    System.out.println("a:"+a);
}
输出:
a:3
a:3
  1. a是short类型,b是int类型(a类型范围比b类型小)
public static void main(String[] args) {
    short a = 1;
    int b = 2;

//    a = a + b;
//    System.out.println("a:"+a);

    a = 1;
    a += b;
    System.out.println("a:"+a);
}
输出:
a:3

// a = a + b;这种写法编译器就不通过,编译器无法编译
// 因为a是short类型,而(a + b)在运算时会自动把a转成int类型然后在运算,得到的结果就是int类型的数据
// 此时无法直接将int类型的数据直接赋值给short类型变量,需要手动强制类型转换,a = (short)(a + b);

// a += b;这种写法在编译时编译器会自动帮我们进行了强制类型转换,所以可以正常编译
  • 总结:a = a + b;这种写法需要注意类型转换问题,而  a += b;这种写法编译器会自动帮我们进行类型强制转换