Java/运算符

维基教科书,自由的教学读本
117.136.100.244留言2016年11月27日 (日) 03:05的版本 (Java运算符之间的运算顺序)

计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了很多运算符,主要来说,運算符包括以下幾種:

加、减、乘、除和取余运算符

加法、减法与乘法

加(+)、减(-)、乘(*)这三种运算符使用起来和数学的一般用法基本相同(当然得到正确结果的前提是不能超过数据类型的取值范围),先看个例子吧。

public class OperatorBasis
{
	public static void main(String args[])
	{
		int a = 25;
		int b = 5;
		int sum = a + b;
		int difference = a - b;
		int product = a * b;
		System.out.print(
			a + "+" + b + "=" + sum + "\n" +
			a + "-" + b + "=" + difference + "\n" +
			a + "*" + b + "=" + product + "\n"
		);	
	}
}

使用这个程序,我们成功地计算出了25和5的和、差、积,虽然我们口算的时间比编程序的时间还短不少……然而,我们也可以把a,b赋值为更大一些的数据,比如a=299,b=5449,这样一来计算机的计算优势就体现得更为明显一些。

这个程序还说明了其他的一些问题……

  1. Java中,“+”运算符还有另外的用法——拼接字符串,而且在使用这个运算符时并不需要手动将数值类型转化为字符串
  2. Java中一条语句可以分为多行(但是不能将一个字符串分在多行书写),正因为如此,Java的每条语句结尾必须有分号。
  3. 既然Java中字符串不可能包含“换行”这个字符,我们需要用一种不同的方式来表达,这就是转义字符,比方说“\n”表示换行,“\"”表示双引号(否则只有一个双引号会被解释为字符串结束),“\\”表示反斜杠自己……

除法和取余运算符

除法(/)运算符在Java中的表现未必和其数学意义完全相同。阅读下面的程序,试着猜测运行结果,然后再试着编译并运行它……

public class DivisionOperator
{
	public static void main(String args[])
	{
		int a, b, quotient;
		a = 25;
		b = 5;
		quotient = a / b;
		System.out.println ( a + "/" + b + "=" + quotient );
		a = 5;
		b = 3;
		quotient = a / b;
		System.out.println ( a + "/" + b + "=" + quotient );
	}
}

如果您之前没有学习过任何计算机语言的话,结果可能会令您惊讶——25除以5等于5,毫无疑问,但5/3=1是怎么回事呢?

在Java中,如果两个运算数都是整数,那么除法运算符的运算结果也是整数,并且会省略一切小数点后的值(或者说是两个整数相除得到的商)。而取余运算符(%),则对应的是两个整数相除得到的余数。

您可能觉得这有些难以理解,下面这个程序(给出除法的商和余数)可以帮助您理解除法运算符和去余运算符的意义……

public class Division
{
	public static void main(String args[])
	{
		int m,n;
		m = 99;
		n = 10;
		System.out.println ( m + "/" + n + "=" + m/n + "......" + m%n );
		m = 15;
		n = 4;
		System.out.println ( m + "/" + n + "=" + m/n + "......" + m%n );
		m = 9;
		n = 3;
		System.out.println ( m + "/" + n + "=" + m/n + "......" + m%n );
		m = 0;
		n = 10;
		System.out.println ( m + "/" + n + "=" + m/n + "......" + m%n );
		m = -1;
		n = 3;
		System.out.println ( m + "/" + n + "=" + m/n + "......" + m%n );
		m = -10;
		n = 3;
		System.out.println ( m + "/" + n + "=" + m/n + "......" + m%n );
		m = 10;
		n = -3;
		System.out.println ( m + "/" + n + "=" + m/n + "......" + m%n );
		m = -10;
		n = -3;
		System.out.println ( m + "/" + n + "=" + m/n + "......" + m%n );
	}
}

这个程序涵盖了各种特殊的情况……比方说整除的情况下余数为0,被除数为0的情况下商和余数都是0,还有除数/被除数为负数的情况——这显得有些古怪,不过也确实可以正常运行。

注意在这两种运算符中,试图除以0都会造成系统抛出异常。

比较运算符

  • == 等于
  • != 不等于
  • > 大于
  • < 小于
  • >= 大于或等于
  • <= 小于或等于

逻辑运算符

  • && 及
  • || 或
  • !非

位运算符

  • >> 右移(带符号)
  • << 左移(带符号)
  • >>> 补零右移
  • &按位与
  • |按位或
  • ~按位取反
  • ^按位异或

各种简便表示法

运算符的优先级

一元运算符>算术运算符>比较运算符>逻辑运算符>位运算符>赋值运算符