数学函数和常量

Math类提供了常用的一些数学函数,如:三角函数、对数、指数等。一个数学公式如果想用代码表示,则可以将其拆分然后套用Math类下的方法即可。在 Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。

Math.sqrt(x); 			//计算数值x的平方根
Math.pow(x,a);			//计算数值x的a次幂
Math.sin(θ);			//sin(θ)的值				
Math.cos(θ);			//cos(θ)的值
Math.tan(θ);			//tan(θ)的值
Math.atan(θ);			//actan(θ)的值
Math.exp(x);			//e的x次幂
Math.log(x);			//以e为底的对数
Math.log10(x);			//以10为底的对数
Math.PI					//圆周率π
Math.E					//自然数e

数值类型之间的转换

经常需要将一种数值类型转换为另一种数值类型。下图给出了数值类型之间的合法转换。图中的6个实心箭头,表示无信息丢失的转换;3个虚箭头表示可能有精度损失的转换

java 中的次方 java求次方的函数_java


当使用不同类型的两个数值进行二元操作时,先要将两个操作数转换为同一种类型,然后再进行计算。

强制类型转换

在必要的时候,int类型的值将会自动地转换成double类型。但另一方面,有时也需要将double转换成int。在Java中,允许进行这种数值之间的类型转换。在这种情况下,需要通过强制类型转换实现这个操作。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟着待转换的变量名。例如:

double x=10.001;
		int nx=(int) x;

这样,变量nx的值为10,强制类型转换通过截断小数部分将浮点值转换为整型。如果想对浮点数进行舍人运算, 以便得到最接近的整数(在很多情况下, 这种操作更有用), 那就需要使用 Math.round 方法

double x=9.699;
		int nx=(int) Math.round(x);

现在, 变量 nx 的值为 10。 当调用 round 的时候, 仍然需要使用强制类型转换( int)。 其原因是== round 方法返回的结果为 long 类型==,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将 long 类型转换成 int 类型。

结合赋值和运算符

可以在赋值中使用二元运算符,这是一种很方便的简写形式。例如:

x+=4;		//等价于x=x+4

自增与自减运算符

在Java中,借鉴了C和C++的做法,也提供了自增、自减运算符:n++将变量n的当前值加1,n–则将n的值减1。例如

int n=12;
		n++;

将n的值改为13.由于自增、自减运算发会改变变量的值,所以它们的操作数不能是数值
自增、自减运算符有两种形式;前面介绍的是运算符放在操作数后面的“后缀”形式。还有一种“前缀”形式:++n。后缀和前缀形式都会使变量值加 1 或减 1。但用在表达式中时,二者就有区别了。前缀形式会先完成加 1; 而后缀形式会使用变量原来的值。

int m=3;
		int n=3;
		int a=2*++m;  //a=8,m=4;
		int b=2*n++;  //b=6,n=3;

建议不要在表达式中使用自增、自减运算符,因为这样的代码容易让人困惑,而且会带来bug

关系和boolean运算符

Java 包含丰富的关系运算符:要检测相等性,可以使用两个等号 ==。另外可以使用!= 检测不相等。例如

3==7	//false
		3!=7	//true

最后, 还有经常使用的 < (小于、) > (大于)、<=(小于等于)和 >= (大于等于)运算符。
Java 沿用了 C++ 的做法,使用 && 表示逻辑“ 与” 运算符,使用丨| 表示逻辑“ 或” 运算符。从 != 运算符可以想到,感叹号!就是逻辑非运算符。&& 和丨| 运算符是按照“ 短路” 方式来求值的: 如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。因此,可以利用这一点来避免错误。
最后一点,Java 支持三元操作符 ?:,如果条件为 true, 下面的表达式

condition ? expression1 : expression2

就为第一个表达式的值,否则计算为第二个表达式的值。

位运算符

处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使用掩码技术得到整数中的各个位。位运算符包括:

& ("and") | ("or") A ("XOr") ~ ("not")

另外,还有 >>和 <<运算符将位模式左移或右移 。最后,>>>运算符会用 0 填充高位,这与>>不同,它会用符号位填充高位。不存在<<<运算符。

括号与运算符级别

下给出了运算符的优先级。 如果不使用圆括号, 就按照给出的运算符优先级次序进行计算。同一个级别的运算符按照从左到右的次序进行计算(除了表中给出的右结合运算符外。)

运算符

结合性

[ ].( )(方法调用)

从左向右

! ~ ++ – +(一元运算) -(一元运算) ( )(强制类型转换) new

从右向左

* / %

从左向右

+ -

从左向右

<< >> >>>

从左向右

< <= > >= instanceof

从左向右

== !=

从左向右

&

从左向右

^

从左向右

|

从左向右

&&

从左向右

||

从左向右

?:

从右向左

= += -= *= %= &= |= ^= <<= >>= >>>=

从右向左

枚举类型

有时候,变量的取值只在一个有限的集合内。针对这种情况,可以自定义枚举类型。枚举类型包括有限个命名的值