算术运算符包括:+
,-
,*
,/
,%
,++
,--
+
当左右两边都是数值型时,则做加法运算。
当左右两边有一方为字符串,则做拼接运算。任何一个 Java 对象都可以转换为字符串。
如果 +
作用于字符,就将字符转为整数进行计算。
程序示例:
public static void main(String[] args) {
System.out.println(100 + 86); // 186
System.out.println("100" + 86); // 10086
System.out.println(100 + 3 + "Hello"); // 103Hello
System.out.println("Hello" + 100 + 3); // Hello1003
System.out.println(3.7 + "hello"); // 3.7hello
System.out.println("abc" + true); // abctrue
System.out.println('中' + "abc" + true); // 中abctrue
System.out.println('a' + 'b'); // 195
System.out.println('a' + "b"); // ab
}
代码 System.out.println(100 + 3 + "Hello");
中,加法从右到左依次进行。
程序示例:
public static void main(String[] args) {
String s1 = "天龙八部";
String s2 = "笑傲江湖";
String s3 = s1 + s2;
System.out.println(s3); // 天龙八部笑傲江湖
char ch1 = '男';
char ch2 = '女';
// char ch3 = ch1 + ch2; // Type mismatch: cannot convert from int to char
System.out.println(ch1 + ch2); // 52906
double num1 = 123.56;
double num2 = 100.11;
double num3 = num1 + num2;
System.out.println(num3); // 223.67000000000002
}
/
除法分为整数除法和浮点数除法。当两个操作数都是整数时,执行整数除法,否则执行浮点数除法。
两个整数相除,即便除不尽,小数部分也会直接丢弃而不是四舍五入。浮点数参与除法运算,即便数学上能除得尽,结果也是浮点数。
程序示例:
public static void main(String[] args) {
// 两个整数相除,即便除不尽,小数部分也会直接丢弃而不是四舍五入
System.out.println(10 / 4); // 2
double num1 = 10 / 4;
int num2 = 10 / 4;
System.out.println(num1); // 2.0
System.out.println(num2); // 2
// 浮点数参与除法运算,即便数学上能除得尽,结果也是浮点数
System.out.println(8.0 / 4); // 2.0
double num3 = 8.0;
int num4 = 4;
double num5 = num3 / num4;
System.out.println(num5); // 2.0
// int num6 = num3 / num4; // Type mismatch: cannot convert from double to int
}
整数被 0 除将产生一个异常,而浮点数被 0 除将会得到一个无穷大或 NaN 结果。
程序示例:
// 整数被 0 除将产生一个异常,而浮点数被 0 除将会得到一个无穷大或 NaN 结果
public class DivideDemo {
public static void main(String[] args) {
// System.out.println(10 / 0); // Exception in thread "main" java.lang.ArithmeticException: / by zero
System.out.println(10.0 / 0); // Infinity
System.out.println(-10.0 / 0); // -Infinity
System.out.println(0.0 / 0); // NaN
System.out.println(-0.0 / 0); // NaN
System.out.println(0.0 / 0.0); // NaN
System.out.println(0 / 0.0); // NaN
}
}
%
%
作用于整数时,取模的结果的正负号和第一个运算数相同。
%
作用于整数时的结果根据公式计算:a % b = a - a / b * b
程序示例:
public static void main(String[] args) {
System.out.println(10 % 3); // 1
System.out.println(-10 % 3); // -1
System.out.println(10 % (-3)); // 1 , -3 可以不要括号
System.out.println(-10 % (-3)); // -1 , -3 可以不要括号
}
程序示例:
public static void main(String[] args) {
int all_days = 59;
int weeks = 59 / 7;
int days = 59 % 7;
System.out.println(all_days + " 天等于 " + weeks + " 星期 " + days + " 天."); // 59 天等于 8 星期 3 天.
}
%
可以作用于浮点数。
如果 a % b
中的 a
是浮点数,那么 a % b = a - (int)a / b * b
程序示例:
System.out.println(-10.5 % 3); // -1.5
System.out.println(10.5 % -3); // 1.5
System.out.println(-10.4 % 3); // -1.4000000000000004 , 说明结果可能是一个近似值
++
语句 ++i;
和 i++;
独立使用时,效果和 i = i + 1;
完全一致。
程序示例:
public class ArithmeticOperatorExcercise01 {
public static void main(String[] args) {
int i = 1;
i = i++; // temp = i; i = i + 1; i = temp;
System.out.println(i); // 1
int j = 1;
j = ++j; // j = j + 1; temp = j; j = temp;
System.out.println(j); // 2
}
}
很多程序员认为前缀和后缀这种行为容易让人困惑。在 Java 中,很少在表达式中使用 ++
和 --
。