Java学习之路——Java中的运算符

Java学习之路——Java中的运算符

1.算术运算符

1.1基础四则运算符(+ - * / %)

Java中的基础四则运算规则比较简单,只需注意除法运算时int型除int型结果依然为int型,0不能做除数的问题。

+ - * %的基础运算
public class Text {
    public static void main(String[] args) {
        int a = 2 ;
        int b = 3 ;
        int c = 5 ;
        int d = 10 ;
        System.out.println(a + b);  //2+3结果为5
        System.out.println(d - c);  //10-5结果为5
        System.out.println(a * c);  //2*3结果为10
        System.out.println(d % b);  //10%3结果为1
    }
}
观察除法中可能会出现的情况
public class Text {
    public static void main(String[] args) {
        int a = 5 ;
        int b = 2 ;
        System.out.println(a/b);           //结果为2
        System.out.println(a/(double)b);   //结果为2.5
        System.out.println((double)a/b);   //结果为2.5
        System.out.println((double)(a/b)); //结果为2.0
    }
}
除数为0的情况如下
public class Text {
    public static void main(String[] args) {
        int a = 5 ;
        int b = 0 ;
        System.out.println(a/b);
        // 出现异常为:Exception in thread "main" java.lang.ArithmeticException: / by zero
    }
}
求模中出现负数的情况
public class Text {
    public static void main(String[] args) {
        System.out.println(10 % -3);    //10%-3结果为1
        System.out.println(-10 % 3);    //-10%3结果为-1
        System.out.println(-10 % -3);   //-10%-3结果为-1
    }
}
1.2增量赋值运算符(+=  -=  *= /= %=)

这几种运算符都等价于先运算后再对自身进行赋值
a += 1 等价于a = a + 1     a -= 1 等价于a = a - 1
a *= 1 等价于a = a * 1     a /= 1 等价于a = a / 1
a %= 1 等价于a = a % 1

1.3自增/自减运算符(++   - - )

++ - -等价于自身增加1,要区分a++ 和 ++a的区别,若不取自增运算表达式的返回值,则前置和后置没有区别,如果取则前置自增的返回值是自增之后的值,后置自增的返回值是自增之前的值。

观察自增运算
public class Text {
    public static void main(String[] args) {
        int a = 6 ;
        a = a++ ;
        System.out.println("a=" + a);                //结果为a=6,返回值是自增之前的值
        a = ++a ;
        System.out.println("a=" + a);                //结果是a=7,返回值是自增之后的值
        int b = a++ ;
        System.out.println("a=" + a  + "\tb=" + b);  //结果是a=8 b=7,b收到的返回值是a自增前的值
        b = ++a ;
        System.out.println("a=" + a  + "\tb=" + b);  //结果是a=9 b=9,b收到的返回值是a自增后的值
    }
}|

在这里插入图片描述

2.关系运算符

主要的六个关系运算符(== != < > <= >=)

关系运算符的表达式返回值都是boolean类型的,他们的作用分别是
(a == b)判断a是否等于b  (a != b)判断a是否不等于b
(a < b)(a > b) 判断a是否小于(大于)b
(a <= b)(a >= b) 判断a是否小于等于(大于等于)b

观察关系运算符的返回值
public class Text {
    public static void main(String[] args) {
        int a = 20 ;
        int b = 10 ;
        System.out.println(a == b);  //结果为false
        System.out.println(a != b);  //结果为true
        System.out.println(a < b);   //结果为false
        System.out.println(a > b);   //结果为true
        System.out.println(a <= b);  //结果为false
        System.out.println(a >= b);  //结果为true
    }
}

2.逻辑运算符

主要逻辑运算符(&& || !)

逻辑运算符的操作数(操作数通常是关系运算符的结果)和返回值都是boolean类型的。
逻辑与 && 规则:两边有一个false,结果就为false。
逻辑或|| 规则:两边有一个true,结果就为true。
逻辑非! 规则:操作数为true,结果为false;操作数为false,结果为true,这是一个单目运算符,只有一个操作数。

&&和||遵守短路求值的规则
public class Text {
    public static void main(String[] args) {
        System.out.println(3 > 4 && 3/0 == 0);
        System.out.println(3 < 4 || 3/0 == 0);
    }
}

程序中有3/0,但是由于短路原因,并未运行到3/0,所有程序可以正常运行得出结果,不会抛出异常。
在这里插入图片描述

&和|不支持短路求值
public class Text {
    public static void main(String[] args) {
        System.out.println(3 > 4 & 3/0 == 0);
        System.out.println(3 < 4 | 3/0 == 0);
    }
}

程序抛出除数不能为0的异常,&和|并不能做到短路求值,所以一般不推荐使用。
在这里插入图片描述

4.位运算符

主要的位运算符号(& | ~ ^)

位运算符是按照二进制进行计算,按位运算就是按照二进制的每一位依次进行计算。四个主要运算符的规则如下
按位与&:如果两个操作数二进制位都是1结果为1,否则结果为0
按位或|: 如果两个操作数二进制位都是0结果为0,否则结果为0
按位取反~:如果操作数该位为0则转为1,该位为1则转为1
按位异或^: 如果两个数字的二进制位相同则结果为0,相异结果为1

基础的位运算
public class Text {
    public static void main(String[] args) {
        int a = 20 ;
        int b = 10 ;
        int c = 5 ;
        int d = 2 ;
        System.out.println(a & b);   //结果为0
        System.out.println(a | b);   //结果为30
        System.out.println( ~c);     //结果为-6
        System.out.println(c ^ d);   //结果为7
    }
}

5.移位运算

三个移位运算符(>> << >>>)

三个位运算符都是按照二进制来运算的,但是要注意,移动负数位或者移位位数过大都没有意义,会出现问题。左移1位相当于原数字2,左移n位相当于原数字2的n次方。右移一位相当于原数字/2,右移n位相当于原数字/2的n次方,由于计算机计算移位效率高于计算乘除,当某个代码正好需要乘除2的n次方时,可以使用移位运算代替。

右移>> 最右侧的位不要了 最左侧补符号位(正数补0,负数补1)
左移<< 最左侧位不要了 最右侧补0
无符号右移>>> 最右侧位不要了,最左侧补0

public class Text {
    public static void main(String[] args) {
        int a = 0xff0 ;                    //十六进制数字
        System.out.printf("%x\n",a >> 1);  //用printf格式化输出内容,%x表示按照十六进制输出,方便观察
        System.out.printf("%x\n",a << 1);
        System.out.printf("%x\n",a >>> 1);
    }
}

最终结果如下
在这里插入图片描述

6.条件运算符

条件运算符只有一个(表达式1 ?表达式2 : 表达式3)

条件运算符也是Java中唯一的一个三目运算符,是条件判断语句的简化写法,当表达式1的值为true时,整个表达式为表达式2的值;当表达式1的值为false时,整个表达式为表达式2的值.

求三个整数的最大值和最小值
public class Text {
    public static void main(String[] args) {
        int a = 3 ;
        int b = 4 ;
        int c = 5 ;
        int max = (a > b ? a : b) > c ? (a > b ? a : b ): c;
        int min = (a > b ? b : a) > c ? c : (a > b ? b : a);
        System.out.println("最大值为" + max + "\t最小值为" + min);
    }
}

最终结果如下
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值