3.5 运算符

    xiaoxiao2021-08-27  156

    Java里面会用到很多运算符,例如:+、-、*、/等。

    /运算符用于计算除法。整型直接相除会得到一个整型,余数直接舍去了:15/2 = 7;如果想要得到余数,用%运算符15%2=1;如果/两边至少有一个是浮点型,那么计算结果也是浮点型,就会有小数啦:15.0/2 = 7.5。

    整型除以0会爆出一个异常;浮点数除以0会得到NaN或者无穷大。

    注意:在使用staticfp关键字声明的方法中,该方法内部的运算会采用严格浮点进行计算,就是比较精确而已。如果声明了一个类,则这个类内部所有的方法计算都采用严格浮点进行计算。

    public static staticfp void main(String[] args)

    不知道为什么不介绍=这个操作符。=学名叫赋值,实际上是,左边的变量指向右边的运算结果。

    1 数学函数和数学常量

    Math类包含大量的数学函数方法,你肯定会用到的。例如:

    double x = 4; double y = Math.sqrt(x);//开方计算 System.out.println(t);//会输出 2.0 //下面方法只加了括号,具体参数没有写,还是比较多的 Math.sqrt() //计算开方 Math.pow() //指数运算 Math.floorMod() //取余数,适用于24小时、月份这种除法,用负的被除数也可以算出正确的余数,而不是负余数 Math.sin()//正弦函数 Math.cos()//余弦函数 Math.tan()//正切函数 Math.atan()//反正切函数 Math.atan2()//反正切函数,输入坐标计算 Math.exp()//指数函数,e为底 Math.log()//对数函数,e为底 Math.log10()//对数函数,10为底 Math.random()//随机函数,返回一个[0,1)之间的随机浮点数 Math.PI//常量,圆周率 Math.E//常量,自然常数e

    注意:Math类属于系统提供的类,但是需要引入import才能使用,所以在类名前一行应该加入下面引入语法才能使用Math类。

    import java.lang.Math;//这是一种 import java.long.Math.*;//这是另外一种,属于静态导入,在用的时候,就可以省略Math.

    注意:Math类使用的是尽可能快的运算方法,也就可能在其他平台系统上会得到不一样的速度和精度。如果你想让所有平台都得到一样的运算结果(包括精度)而不在意速度问题的话,应该采用StrictMath类进行运算。

    2 数值类型直接进行转换

    不可避免的,我们需要在不同数值类型间进行转换。下图显示的是直接转换的情况: 图中,实线表明这种类型之间的转换,不会损失精度,虚线表示会损失精度。 例如:

    int n = 123456789; float f = n;//f = 1.23456792E8

    注意:Java会默认对计算结果使用较高精度的那个结果

    有double类型会得到一个double结果。没有double类型,但是有float类型会得到float结果。没有浮点型,有long类型则会得到一个long结果。就照上面情况类似啦,其实强类型语言的好处就是,上面这类的运算结果IDE一般会给你提醒,如果你用错的话。

    3 强制类型转换

    如果你明确的可以接受精度损失,就必须进行强制类型转换,来告诉Java你就是要转换类型。 比如:如果你想得到1~12之间的随机整数,但是Math.random()函数会得到一个随机的[0,1)之间的浮点数,那么只好这样进行运算了:

    double r1 = Math.random() * (13 - 1);//得到[0,12)之间的随机浮点数 double r2 = r1 + 1;//加上基数1,变成[1,13)之间的随机浮点数 int randomNumber = (int)r2;//截断小数部分,只去整数部分化作整型,则是[1,12]之间的随机整数了

    在上面的例子中,把一个double类型的变量r2强制转换成为了int类型,失去了原本的小数部分,语法是前面加上(),括号里面写上你要转换的类型。 注意:如果你的强制转换超过了目标类型的范围,就会出错了。各种错误啊。

    4 合并的运算符

    x = x + 4;//一般的写法 x += 4;//简化写法,其实效果都是一样的 //类似的还有 x -= 4; x *= 4; x /= 4; x %= 4;

    注意:使用合并的运算符,得关注两边的类型问题,用不好可能出错哈。

    5 自增和自减运算符(针对变量的哦)

    自增运算符

    x = x + 1;//一般写法 x++;//简化写法1 ++x;//简化写法2

    自减运算符

    x = x - 1;//一般写法 x--;//简化写法1 --x;//简化写法1

    注意:自增和自减运算符本身也可加入到别的计算式中,例如:

    y = x++ * 5;

    等同于

    int z = x; x = x + 1; y = z * 5;

    y = ++x * 5;

    等同于

    x = x + 1; y = x * 5;

    规则是:++x会把加1后的结果代入计算,x++也会自增1,不过代入计算的是之前的x。自减运算符类似。

    6 关系运算符和逻辑运算符

    关系运算符作用举例结果‘==’检测两边是否相等3 == 7false‘!=’检测两边是否不等4 != 7true‘<’检测左边是否小于右边5 < 7true‘>’检测左边是否大于右边6 > 7false‘<=’检测左边是否小于或等于右边7 <= 7true‘>=’检测左边是否大于或等于右边8 >= 7true
    逻辑运算符作用举例结果‘&&’两边都为true,才为true,如果左边已经是false了,则不计算右边false && truefalse‘&’两边都为true,才为true,两边都计算3 > 4 & 3 < 4false‘丨丨’两边都为false,才为false,如果左边已经是true了,则不计算右边false 丨丨 truetrue‘丨’两边都为false,才为false,两边都计算3 > 4 丨 3 < 4true‘!’取反!falsetrue

    注意:上述符号应该都是英文状态下的输入,上面表格里面不全是哦,因为这个文档的问题,我不能输入正确的,天坑。


    三元运算符 ?:

    //问号前面是个逻辑表达式,如果是true,则返回冒号前面的式子,否则返回冒号后面的式子 int a = x < y ? x : y;

    7 位运算符

    位运算符作用举例结果‘&’二进制运算,每一位对应进行与运算1100 & 01010100‘丨’二进制运算,每一位对应进行或运算1100 丨 01011101‘^’二进制运算,每一位对应进行异或运算1100 ^ 01011010‘~’二进制运算,对每一位应进行取反运算~01011010‘>>’二进制运算,右移运算,符号位填充高位0b111100 >> 20b1111‘>>>’二进制运算,右移运算,0填充高位0b111100 >>> 20b000001111‘<<’二进制运算,左移运算0b10010001 << 20b01000100

    8 小括号和运算符优先级

    运算符结合性[] . ()从左至右! ~ ++ – +(一元运算) -(一元运算) () (强制类型转换) new从右至左‘*’(打不出来只好加单引号了) / %从左至右‘+’(打不出来只好加单引号了) -从左至右<< >> >>>从左至右< <= > >= instanceof从左至右== !=从左至右&从左至右^从左至右丨从左至右&&从左至右丨丨从左至右?:从右至左= += -= *= %= &= ‘丨=’ ^= <<= >>= >>>=从右至左

    在实际应用过程中,只要你想让某个运算先算,直接加上小括号就是了,不用记这些运算优先级的。

    9 枚举类型

    Java里面有一个和class同等级的叫做枚举enum。 也可以说枚举是特别的类。

    enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE }

    这样使用:

    Size s = Size.MEDIUM;

    为什么要用枚举?因为某些情况下,我们定义变量会变的,万一用错了,很麻烦的,所以像这类表示有限个状态的情况下,可以定义枚举类区分状态。

    转载请注明原文地址: https://ju.6miu.com/read-677235.html

    最新回复(0)