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都會造成系統拋出異常。

比較運算符[編輯]

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

邏輯運算符[編輯]

  • && 及
  • || 或
  • !非

位運算符[編輯]

  • >> 右移(帶符號)
  • << 左移(帶符號)
  • >>> 補零右移
  • &按位與
  • |按位或
  • ~按位取反
  • ^按位異或

各種簡便表示法[編輯]

運算符的優先級[編輯]

一元運算符>算術運算符>比較運算符>邏輯運算符>位運算符>賦值運算符