算术运算符
--------------------------------------------------------------------------------
1. 取模运算% (只需要记住3个字: 取余数)
(1)左边小于右边,结果为左边
(2)左右相等,结果为0
(3)右边为1,结果为0
(4)出现负数,则只看左边(左边为正,结果为正; 左边为负,结果为负)
(5)*** 取模结果的符号始终与左边相同
// (1)左边小于右边,结果为左边s
System.out.println(10 % 15); // 10
// (2)左右相等,结果为0
System.out.println(10%10); // 0
// (3)右边为1,结果为0
System.out.println(3%1); // 0
// (4)出现负数, 则只看左边(左边为正, 结果为正: 左边为负, 结果为负.
// (5)*** 取模结果的符号始终与左边相同
System.out.println(-8%3); // -2
System.out.println(8%(-3)); // 2
--------------------------------------------------------------------------------
2. 自增++和自减--
例如, int a = 3, b;
若b = a++; 则a,b的值为多少? //a = 4, b = 3。
若b = ++a; 则a,b的值为多少? //a = 4, b = 4。
分析: ++结合性从右向左,=结合性从右向左,++优先级高于=
(1) b = a++; 先赋值再自加
++右边无变量,但=右边有变量,先进行=运算;
(2) b = ++a; 先自加再赋值
++右边有变量,先进行++运算,再进行=运算
***总结:
前缀++/--, 先自增自减
后缀++/--, 后自增自减
***原理:
前缀++/--, 就是将变量的值自增/自减;
后缀++/--, 操作时先拷贝变量的值, 然后变量自增/自减, 再返回拷贝值作为表达式的值
例外: 不管前缀++/--, 还是后缀++/--, 其底层原理都包含了强制类型转换
-------------------------------------
int a = 10;
System.out.println(a++); // 10. 因 a++ 表达式的值为10, 而 a 的值为11
-------------------------------------
int a = 10;
int b = 10;
int c = 10;
a = b++; // a=10, b=11
c = --a; // c=9, a=9
b = ++a; // b=10, a=10
a = c--; // a=9, c=8
-------------------------------------
int x = 4;
int y = (x++) + (++x) + (x*10); // 70
x的值 5 6 6
表达式的值 4 6 60
-------------------------------------
下面语句, 哪句会报错?
byte b = 10;
b++; // 不会报错. 底层会进行强制转换 b = (byte)(b+1);
b = b + 1; // 报错. 右边运算结果为 int 型, 而左边为 byte 型
-------------------------------------
int a = 10;
a = a++;
System.out.println(a); // 10
/*
考查++/--运算符的底层原理:
前缀++/--, 就是将变量的值自增/自减
后缀++/--, 操作时先拷贝变量的值, 然后变量+1/-1
*/
-------------------------------------
int a = 10;
int b = (a++) + (a++) + (a++); // a=13, b=33
a 的值 11 12 13
表达式值 10 11 12
/*
分析: 代码总是自上而下, 从左往右执行
(只有一小部分才考虑运算符的右结合性, 如一元运算符, 三元运算符, 赋值运算符;
但总的方向还是从左向右的)
*/
--------------------------------------------------------------------------------
3. 运算符“+”(正号/加运算符/字符串相加)
正号 “+” -> 单目运算符
加运算符 “+” -> 双目运算符
字符串相加运算符 “+” -> 双目运算符
注意:
字符串数据和任何数据使用+相连接, 最终都会变成字符串.
如
System.out.println("5+5="+5+5); //结果: 5+5=55
int a=3, b=4;
System.out.println("a="+a+",b="+b); //结果: a=3,b=4
System.out.println(1+2+"java"+3+4); //结果:3java34.
/*
分析: 代码总是自上而下, 从左往右执行
所以, 先做加法运算, 再做字符串连接操作
第1个"+"是 Additive Operators (+ and -) for Numeric Types
后面的3个"+"是 String Concatenation Operator
总结: 字符串前的那个"+"和字符串后的所有"+"都是 String Concatenation Operator
*/
-------------------------------------------------------------------------------- |
|