3.5 运算符

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会默认对计算结果使用较高精度的那个结果

  1. 有double类型会得到一个double结果。
  2. 没有double类型,但是有float类型会得到float结果。
  3. 没有浮点型,有long类型则会得到一个long结果。
  4. 就照上面情况类似啦,其实强类型语言的好处就是,上面这类的运算结果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;

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值