聲明:本文由牛旦教育原創,頭條首發,所有權保留,轉載注明來源。
JAVA編程中,最開始學習的應該計算程序,應該就是算術運算了。Java中算術運算符號有很多,包括加減乘除(+-*/)和取模(%)與它們的復合運算(+=、-=、*=、/=)以及自增自減(++、--)操作,還有正負運算(+、-)這些都是算術運算的操作符。作為數學中的算術運算符存在,它只能對數字類型的值進行運算,也就是只能對byte,short,char,int,long,float或double類型之一。而且在做具體運算時,它們是有規則要遵循的。
1.算術運算規則
具體在做算術運算時,Java程序中做算術運算的操作符所操作的兩個操作數看作一個表達式,而表達式的數據類型根據四條規則之一確定:
1) 如果其中一個操作數為double,則另一個操作數轉換為double,整個表達式的類型為double。
否則:
2) 如果其中一個操作數為float,則另一個操作數轉換為float,整個表達式的類型為float。
要不然,
3) 如果其中一個操作數為long,另一個操作數轉換為long,整個表達式的類型為long。
要不然,
4) 如果前三條規則都不適用,則所有操作數都轉換為int,前提是操作數不是int類型的,但整個表達式的類型為int。比如
byte b1,b2=2,b3=3; b1=5;//正確 b1=b2+b3;//編譯出錯。
之所以出錯,就是本條規則起作用的原因(把int型賦值給byte型,不兼容)。
總結來說,操作數的數據類型轉換和涉及加法運算符的表達式類型判定的最終結語:
var = operand1 + operand2;
如果操作數1和操作數2是編譯時常量,操作數1操作數2的結果將確定此賦值是否有效。 如果操作數1操作數2的結果在變量var的數據類型的范圍內,則表達式將被編譯。 否則,會生成編譯器錯誤。 如果操作數1或操作數2是一個變量(即無法在編譯時確定操作數1或操作數2的值),則表達式的數據類型根據上面討論的四個規則之一來確定
2. 規則外注意項
第一點:加號+可在字符串中使用,以拼接兩個字符串或兩個操作數,形成新的字符串;
第二點:作為拼接字符串操作符用時,一個或多個操作數中,必須有一個是字符串(包括空字符串),其它的操作數可以為基本類型和引用類型;
第三點:Java中除法有整數除法和浮點(帶小數點)除法兩種,且除數不能為0。對于整數除法,結果只能是整數,即將結果取整,忽略小數。如8/5,結果為1;對于浮點除法,則執行浮點除法并且結果不會被截斷,但注意類型轉換問題;
第四點:取模運算的規則,分兩種情況——
1)當兩個操作數都為整數數時,遵守下列規則計算結果:
規則#1:如果右側操作數為零,則會出現運行時錯誤; 例如,
int num ; num = 15%0; //運行時錯誤
規則#2:如果右側操作數不為零,則結果的符號與左側操作數的符號相同;例如,
num = -15 % 6; // 把-3賦給num num = 15 % -6; // 把3賦給num num = -15 % -6; // 結果為 -3,因為左邊操作數為-15, 負數
2)當模數運算符的任一操作數是浮點數,遵循以下規則計算結果:
規則#1:即使右邊的操作數是一個浮點零,該操作也不會導致錯誤。
規則#2:如果任一操作數是NaN,結果是NaN。NaN代表"不是數字"。NaN是算術運算的結果,它不具有有意義的結果,例如將零除零、負數的平方根、將無窮大加到無窮大等等。有兩類NaN,可以通過Float.NaN或Double.NaN來使用一個NaN參與運算。
規則#3:如果右側操作數為零,則結果為NaN。例如,
float f1; f1 = 15.0F % 0.0F; // 把Float.NaN 賦給 f1
規則#4:如果左邊的操作數是無窮大,結果是NaN。 例如
float f1; f1 = Float.POSITIVE_INFINITY % 2.1F; // 把Float.NaN 賦給f1
規則#5:如果前面的規則都不適用,模數運算符將返回左側操作數和右側操作數的除法余數。結果的符號與左側操作數的符號相同。例如,
float f1; double d1; f1 = 15.5F % 6.5F; // 把 2.5F賦給 f1 d1 = 5.5 % 15.65; // 把5.5賦給 d1 d1 = 0.0 % 3.78; // 把0.0 賦給d1 d1 = 85.0 % Double.POSITIVE_INFINITY; // 把85.0賦給d1
第五點:一元運算符(+和-)。操作數必須是基本的數字類型。 如果操作數是byte,short或char,則將其提升為int,主要用于標識數的正負。
就寫這些了,有收獲吧?點個贊,分享出去吧^_^