运算符

1、数学函数

在java中有一个Math类,其中包含了各种各样的数学函数,查看jdk1.8可知,Math类提供了两个常量。

Math.PI:圆周率(π)的近似值;

Math.E:自然对数的基(e)

下面列举Math类提供的常用方法:

Math.pow(x,a):返回x的a次幂。参数都为double类型,返回值为double类型

  double a = Math.pow(3,2);
  System.out.println(a);  //输出结果为 9.0

Math.sqrt(x):返回x的平方根,x为double类型,返回值为double类型

 double b = Math.sqrt(4);
 System.out.println(b);  //输出结果为 2.0

Math.round(x):根据参数x的类型(float、double)返回最接近参数的整数值(int、long)

long c = Math.round(3.4);
System.out.println(c);  //四舍五入操作 当参数为double类型时,返回值为long类型 输出结果为 3

int d = Math.round(5.6F);
System.out.println(d);  //四舍五入操作 当参数为float类型时,返回值为int类型 输出结果为 6

Math.abs(x):返回参数x的绝对值。x为int、long、float、double类型

 int e = Math.abs(-1);
 System.out.println(e);  //输出结果为 1

 double f = Math.abs(-4.3);
 System.out.println(f);  //输出结果为 4.3

Math.cbrt(x):返回x的立方根  x为double类型  返回值为double类型

 double g = Math.cbrt(8);
 System.out.println(g);  //输出结果为 2.0

Math.random():随机返回一个大于等于0且小于1的double类型数据

 double h = Math.random();
 System.out.println(h);  //生成随机数  随机返回一个大于等于0且小于1的double类型数值

2、赋值运算符

在java中,赋值运算符使用 “ = ” 表示。比如:

int a = 12;

 此处是指将12这个值赋给变量a,而不是说a等于12。在java中,用 “==” 表示相等。值得一提的是,此处拓展出一个比较经典的题目。如:

byte a = 12;

a += 3;  //编译通过

a = a+3;  //编译报错 

a = (byte)(a+3);  //编译通过

 我们之前学习java基本数据类的时候说过,整数类型的数据如果不特别强调,默认为int类型,这样我们就不难理解 :       a =a+3 会报错了,因为系统会把3看成是一个int类型数据,当int类型数据与byte类型数据一起运算时,结果会自动提升为int类型,而此处定义的a为byte类型,且没有进行强制转换,所以编译报错。而 a = (byte)(a+3)可以正确表示,但是显得比较复杂。相比之下,a += 3;这种写法的优势就体现出来了,+= 运算符可以简化运算,也不会改变等号右边运算的数据类型。

3、一元运算符(自增、自减)

一元运算符指只有一个参数参与运算。本次讨论:a++、++a、a--、--a

public class Operator {

    public static void main(String[] args) {
        int a = 12;
        int b =3;

        int m = 2*(a++);
        System.out.println(m);  //输出结果 m等于24
        int n = 2*(++b);
        System.out.println(n);  //输出结果 n等于8

    }
}

首先来讨论m值是如何得来的,a++表示当a参与运算之后加1,所以 2*(a++)在此次运算中,a还是12,当执行“2*(a++)”之后a的值才加1。所以此处2*(a++)的值为24,即2*12 = 24, 然后赋值给m,输出m为24;

n的值的生成道理正好相反,++b表示当b参与运算之前加1,所以 2*(++b)在此次运算中,b的值加1之后再参与运算,相当于2*(b+1)操作,即2*(3+1)= 8,然后赋值给n,输出n为8;

总结一下,当++或者--符号在变量之前(如++b),表示先执行加1操作再参与运算,当++或者--符号在变量之后(如a++),表示先执行运算,然后此次运算结束后变量的值加1。

4、关系运算符

运算符含义
==等于
<小于
>大于
<=小于等于
>=大于等于

只有数字才能比较大小,比较结果为:true或false

5、逻辑运算符

运算符含义
&&
||
^异或
|简化或
&简化与
!简化非

看下面例子:

public class Operator {

    public static void main(String[] args) {
        int a = 0;
        int b = 4;

        if(a != 0 & 4/a>1){
            System.out.println("1");
        }else{
            System.out.println("2");
        }
    }
}

从逻辑上来看,当 a != 0 并且 4/a>1 输出1,否则输出2,没错。但是当程序执行时就会报错,因为在进行条件判断时,系统会把&前后两个语句都进行判断,而当a == 0时,4/a>1中检测到分母为0,所以程序报错。

public class Operator {

    public static void main(String[] args) {
        int a = 0;
        int b = 4;

        if(a != 0 && 4/a>1){
            System.out.println("1");
        }else{
            System.out.println("2");
        }
    }
}

再来看这段程序,跟上一个程序相比只是把&运算符换成了&&,发现程序可以正常运行,并输出 2 。这就是“短路”与 的好处,如果&&之前的语句就可以判断出整个表达式的值,&&后面的操作数就不用再计算了。就像例子中的 a!=0 为 false,在 与 运算中,一假则假,所以表达式(a!=0 && 4/a>1)就会直接返回false,4/a>1也被直接跳过,所以程序不会报错。

同理可知,||和|也差不多,如果||前面的操作数为true,那么整个表达式都为true,后面的操作数也不会再去计算。因此,很多时候大家都喜欢使用&&和||来进行逻辑运算,避免程序出错。  

6、三元运算符

语法:

(表达式1)?(值1):(值2)

意思是当表达式1为true时,返回值1,否则返回值2。三元运算符与if(){}else{}相比更加简洁。

7、位运算符

 

运算符名称含义
&按位与当两“位”同时为1时,才返回1
|按位或只要有一“位”为1时,就返回1
~按位非将操作数的每个位(包括符号位)全部取反
^按位异或当两“位”相同时,返回0,当两“位”不同时,返回1
<<左移运算符每左移一位,乘以一个2
>>右移运算符每右移一位,除以一个2

一说到位运算符就涉及到一些操作系统知识,像原码、补码和反码等,我们留到下一篇文章来详细解释。

8、算术运算符

运算符含义
+
-
*
/

%求余

算术运算符在生活中也用的比较多,比较简单,注意计算机中整数的除法结果仍为整数。

public class Operator {

    public static void main(String[] args) {
        int a = -5;
        int b = 7;

        System.out.println(a%b);//输出结果为 -5
        System.out.println(a/b);  //输出结果为 0
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值