声明:本文由牛旦教育原创,头条首发,所有权保留,转载注明来源。
JAVA编程中,最开始学习的应该计算程序,应该就是算术运算了。Java中算术运算符号有很多,包括加减乘除(+-*/)和取模(%)与它们的复合运算(+=、-=、*=、/=)以及自增自减(++、--)操作,还有正负运算(+、-)这些都是算术运算的操作符。作为数学中的算术运算符存在,它只能对数字类型的值进行运算,也就是只能对byte,short,char,int,long,float或double类型之一。而且在做具体运算时,它们是有规则要遵循的。
具体在做算术运算时,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的值),则表达式的数据类型根据上面讨论的四个规则之一来确定
第一点:加号+可在字符串中使用,以拼接两个字符串或两个操作数,形成新的字符串;
第二点:作为拼接字符串操作符用时,一个或多个操作数中,必须有一个是字符串(包括空字符串),其它的操作数可以为基本类型和引用类型;
第三点: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,主要用于标识数的正负。
就写这些了,有收获吧?点个赞,分享出去吧^_^