JAVA的基本程序设计结构(三)

一、运算符

运算符用于连接值。

  1. 算术运算符
    在Java中,使用算术运算符+、-、*、/ 、表示加、减、乘、除运算。当参与 /运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。整数的求余操作(也可称为取模)用%表示。
    例如:15/2=7、15%2等于1、15.0/2等于7.5。
    需要注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
  2. 数学函数与常量
    在Math类中,包含了各种各样的数学函数。
    要想计算一个数值的平方根,可以使用sqrt方法:
double x=4;
double y=Math.sqrt(x);
System.out.println(y);

在Java中没有幂运算,因此需要借助于Math类的pow方法。
以下语句:double y=Math.pow(x,a);
将y的值设为x的a次幂(x^a)。
pow方法有两个double类型的参数,其返回结果也为double类型。

Math类提供了一些常用的三角函数:
Math.sin
Math.cos
Math.tan
还有指数函数以及它的反函数——自然对数以及以10为底的对数:
Math.exp
Math.log
Math.log10
最后,Java还提供了两个用于表示π和e常量的最接近的近似值:
Math.PI
Math.E
提示:不必在数学方法名和常量名前添加前缀"Math",只要在源文件的顶部加上下面这行代码就可以了;

 import java.lang.Math.*;
  1. 数据类型之间的转换
    在这里插入图片描述
    上述图中有6个实线箭头,表示无信息丢失的转换;另外有3个虚线箭头,表示可能有精度损失的转换。

当用一个二元运算符连接两个值时(例如n+f,n是整数,f是浮点数),先要将两个操作数转换为同一种类型,然后进行计算。
如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。
否侧,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
否侧,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
否则,两个操作数都将被转换为int类型。

  1. 强制类型转换
    从上一小节中我们看到,在必要的时候,int类型的值将会自动地转换为double类型。但另一方面,有时也许需要将double转换为int。在Java中,允许进行这种数值之间的类型转换,当然,有可能会丢失一些信息。这种可能损失信息的转换要通过强制类型转换来完成。
    强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟带转换的变量名。
    例如:
    double x=9.997;
    int nx=(int)x;
    这样,变量nx的值为9,因为强制类型转换通过截断小数部分将浮点值转换为整型

如果想对浮点数进行舍入运算,以便得到最接近的整数,那就需要使用Math.round方法:
double x=9.997;
int nx=(int)Math.round(x);
现在变量nx的值为10;当调用round的时候,仍然需要使用强制类型转换(int)。其原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换为int类型。

  1. 结合赋值和运算符
    可以在赋值中使用二元运算符,这是一种很方便的简写形式。
    例如:x+=4;
    等价于:
    x=x+4;(一般来说,要把运算符放在=号左边,如*=或%=)。
    注释:如果运算符得到一个值,其类型与左侧操作数的类型不同,就会发生强制类型转换。
    例如,如果x是一个int,则以下语句 ;
    x+=3.5;是合法的,将把x设置为(int)(x+3.5);

  2. 自增与自减运算符
    在Java中,借鉴了C和C++中的做法,也提供了自增、自减运算符:n++将变量n的当前值加1,n–则将n的值减1。
    例如,以下代码:
    int n=12;
    n++;
    将n的值改为13。
    由于这些运算符改变的是变量的值,所以它们不能应用于数值本身。如4++就不是一个合法的语句。
    实际上,这些运算符有两种形式:“前缀”(++n)与“后缀”(n++)形式,两种形式都会使变量值加1或减1。但用在表达式中时,二者就有了区别。
    前缀形式会先完成加1;而后缀形式会使用变量原来的值。
    如:

int m=7
int n=7;
int a=2*++m;//a=16,m=8
int b=2*n++;//b=14,n=8

建议不要在表达式中使用++,这样的代码很容易让人困惑,而且会带来烦人的bug。

  1. 关系和boolean运算符
    Java包含丰富的关系运算符。
    要检测相等性,可以使用两个等号==。
    例如,3==7的值为false。
    另外可以使用!=检测不相等。
    例如,3!=7的值为true。
    还有经常使用的< (小于)、>(大于)、<=(小于等于)、>=(大于等于)运算符。
    Java沿用了C++的做法,使用&&表示逻辑“与”运算符,使用 | |表示逻辑“或”运算符。感叹号 !就是逻辑非运算符。
    &&和| |运算符就是按照“短路”方式来求值的:如果第一个操作数已经能够确定表达式的值,第二操作数就不必计算了。
    如果用&&运算符合并两个表达式,expression1 && expression2
    而且已经计算得到第一个表达式的真值为false,那么结果就不可能为true。因此,第二个表达式就不必计算了。
    类似地,如果第一个表达式为true,expression1 | | expression2的值就自动为true,而无须计算第二个表达式。
    Java支持三元运算符? :,如果条件为true,下面的表达式
    expression1 ? expression2 :expression2
    就为第一个表达式的值,否则计算为第二个表达式的值。

  2. 括号与运算符级别
    在这里插入图片描述
    如果不使用圆括号,就按照给出的运算符优先级次序进行计算。同一级别的运算符按照从左到右的次序进行计算(但右结合运算符除外)
    例如,由于&&的优先级比| |的优先级高,所以表达式 a&&b||c 等价于(a&&b)||c
    又因为+=是右结合运算符,所以表达式 a+=b+=c 等价于a+=(b+=c),也就是将b+=c的结果(加上c之后的b)加到a上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清穷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值