+

在Java中,+ 的作用有三种:

  • 表示正数

    System.out.println(+5); // 5
    
  • 表示相加操作

    System.out.println(5+6); // 11
    System.out.println(5+'6'); // 59
    
  • 进行字符串的拼接

    + 左右两侧的任意一侧有字符串,那么这个加号就是字符串拼接的作用,结果一定是字符串。

    int num = 56;
    System.out.println("num="+num); // "num=56"--->num=56
    System.out.println(5+6+"7"); // 11+"7"--->"117"--->117
    System.out.println(5+'6'+"7"); // 59 +"7"--->"597"--->597
    System.out.println("5"+6+"7"); // "56"+"7"--->"567"--->567
    System.out.println("5"+'6'+"7"); // "56"+"7"--->"567"--->567
    System.out.println("5"+'6'+'7'); // "56"+'7'--->"567"--->567
    

++

++ 也叫自增运算符,在单独使用的时候,无论放在操作数前还是后,都是进行加1操作:

int a = 5;
a++; // 相当于 a=a+1  
System.out.println(a); //6

a = 5;
++a; // 相当于 a=a+1  
System.out.println(a); // 6

如果 ++ 参与到运算中,看 ++ 在操作数前还是在后。如果 ++ 在后,先运算,后加1;如果 ++ 在前,先加1,后运算。

a = 5;
int m = a++ + 7;
System.out.println(m); // 12
System.out.println(a); // 6

a = 5;
int n = ++a + 7;
System.out.println(n); // 13
System.out.println(a); // 6

++ 运算符的优先级高于+:

int a = 5;
System.out.println(a++ + a++); // 11
System.out.println(a++ + ++a); // 16
System.out.println(++a + a++); // 20
System.out.println(++a + ++a); // 25

+=

a+=ba=a+b 的一种简便的写法,这两者有什么区别呢?

  • a+=b 可读性稍差,但编译效率高,因为底层自动进行类型转换
  • a=a+b 可读性好,但编译效率低,因为要手动进行类型转换

Question 1:a+=b 相当于 a=a+b ,那么也相当于 a=b+a 吗?

Answer:对基本数据类型来说没有区别,但是对 String 类型就不一样了,会存在字符拼接正着拼和倒着拼的区别,例如:

a = "u";
b = "x";
a = a + b;
System.out.println(a); // ux
a = "u";
b = "x";
a = b + a;
System.out.println(a); // xu

Question 2:下面的代码哪一句出错?

byte a = 10;
int b = 20;
a += b;
a = a + b;

Answer:第4句出错了,因为正如前文所说“ a=a+b 可读性好,但编译效率低,因为要手动进行类型转换”,我们要更正为 a = (byte)(a + b)