java基础之运算符

java运算符

无论哪门语言都会有运算符,用来做数学及逻辑运算,java中大致有以下六种运算符

  • 算术运算符
  • 关系运算符
  • 位运算符
  • 逻辑运算符
  • 赋值运算符
  • 其他运算符

算术运算符

操作符描述实例
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B等于200
/除法 - 左操作数除以右操作数B / A等于2
%取余 - 左操作数除以右操作数的余数B%A等于0
++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)
--自减: 操作数的值减少1B-- 或 --B 等于 19(区别详见下文)

看完表格内的内容,我们继续看下面的代码

    public static void main(String[] args) {
        int a = 1+1;  // 2
        int b = 1-1;  // 0
        int c = 2*2;  // 4
        int d = 4/2;  // 2
        int e = 5%2;  // 1
        List list = Arrays.asList(a,b,c,d,e);
        System.out.println(list);

    }

输出结果: [2, 0, 4, 2, 1]

 

很好理解吧?我们再来看自增和自减如何理解

public static void main(String[] args) {

        int i = 0;
        System.out.println(i++);
        System.out.println(++i);
    }

先来看一下,上述代码,猜猜输出什么?这里新手可能会蒙圈,这个++写在前后有什么区别呢?

先给出结果:

    public static void main(String[] args) {

        int i = 0;
        System.out.println(i++);  // 输出0
        System.out.println(++i);  // 输出2
    }

这里懂的人就懂了,不懂的人可能要思考半天,为什么i++输出0?而不是1呢?为啥++i输出的不是1而是2呢?

emmmm,好吧,我们来讲解一下,首先要搞明白,这个++放在变量i前后是干啥用,有什么区别??

放在变量前,譬如++i表示,先进行自增,再干其他事情,比如运算或者输出等等。。而放在变量后,譬如i++,聪明的你们应该懂了,应该是先进行运算或输出,然后再进行自增。

代码解析:

  1. 声明变量i并赋值为0
  2. 先进行输出,此刻i还是0,没有进行自增操作,所以输出了0
  3. 输出完毕,在内存中把i进行了自增,此时i变为了1
  4. 再次进行输出,不过在输出之前,先把i进行了自增,此时i变成了2
  5. 输出i,此时i是2,所以输出了2

这样应该懂了吧!再不懂我就无力解释了!自减不用我说了吧,道理是一样的。

关系运算符

关系运算符用来描述两个变量之间的关系。

操作符描述实例
==检查如果两个操作数的值是否相等,如果相等则条件为真。(A == B)  为假
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。  (A != B)   为真
检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A  > B)为假
<查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A  < B)为真
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(A>= B)为假
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A<= B)为真

这里就不贴代码了吧,很简单,学过小学数学的人都懂。如果你说你不懂,那我劝你不要学习代码了。。

 

 

 

位运算符

操作符描述实例
如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100
|如果相对应位都是0,则结果为0,否则为1(A | B)得到61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0(〜A)得到-61,即1100 0011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。   A << 2得到240,即 1111 0000
>>按位右移运算符。左操作数按位右移右操作数指定的位数。   A >> 2得到15即 1111
>>>按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。   A>>>2得到15即0000 1111

练习可参考下面的代码

    public static void main(String[] args) {
        int a = 60; /* 60 = 0011 1100 */
        int b = 13; /* 13 = 0000 1101 */
        int c = 0;
        c = a & b;       /* 12 = 0000 1100 */
        System.out.println("a & b = " + c );

        c = a | b;       /* 61 = 0011 1101 */
        System.out.println("a | b = " + c );

        c = a ^ b;       /* 49 = 0011 0001 */
        System.out.println("a ^ b = " + c );

        c = ~a;          /*-61 = 1100 0011 */
        System.out.println("~a = " + c );

        c = a << 2;     /* 240 = 1111 0000 */
        System.out.println("a << 2 = " + c );

        c = a >> 2;     /* 15 = 1111 */
        System.out.println("a >> 2  = " + c );

        c = a >>> 2;     /* 15 = 0000 1111 */
        System.out.println("a >>> 2 = " + c );
    }

输出结果如下

a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2  = 15
a >>> 2 = 15

逻辑运算符 

操作符描述实例
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假
| |称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A  | |  B)为真
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false!(A && B)为真

参考如下代码

public static void main(String[] args) {
        int a = 0;
        int b = 1;
        int c = 2;
        boolean d = true;
        boolean f = false;
        System.out.println(a == 0 && b == 1);  // 两边全为真,则输出true
        System.out.println(d && f);  // 有一个为假,则为假,输出false
        System.out.println(d | f); // 有一个为真,则为真,输出true
        System.out.println(!(c==2));  // 若括号内计算为真,则取反,则为假,输出false
        
    }

在这里还有个要注意的地方就是,&和&&的区别 ,&和&&均表示逻辑与,不过&&有个更特殊的称号叫做“短路与”,那么什么叫“短路与”,“短路”又是什么意思呢?先来看下面的代码

    public static void main(String[] args) {
        int a = 0;
        int b = 0;
        System.out.println(a != 0 &  ++a == 1);
        System.out.println(b != 0 && ++b == 1);
        System.out.println("进行运算后,输出a的值为"+a);
        System.out.println("进行运算后,输出b的值为"+b);
    }

输出结果:

false
false
进行运算后,输出a的值为1
进行运算后,输出b的值为0

为什么此时a和b都进行了自增运算,但是b却为0呢?两段代码除了&和&&的区别,其他都是一模一样的,那么真相只有一个,问题肯定就是出在&和&&的区别上,联想一下之前提到的“短路”,“短路”是物理学中的一个概念,意思是一条电路通了,就不会去走另外一条了(物理渣解释的可能不到位,不要纠结),那么这里也是一样的,“短路与”&&只要第一个值是false,那么后面直接放弃运算!因为逻辑与只要有一个为假则为假,后面的也没必要进行运算了,所以,此刻++b并没有执行该代码,b保持原有的值0不变。

赋值运算符

操作符描述实例
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C -
 A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C * = A等价于C = C * A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A等价于C = C / A
(%)=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A
<< =左移位赋值运算符C << = 2等价于C = C << 2
>> =右移位赋值运算符C >> = 2等价于C = C >> 2
&=按位与赋值运算符C&= 2等价于C = C&2
^ =按位异或赋值操作符C ^ = 2等价于C = C ^ 2
| =按位或赋值操作符C | = 2等价于C = C | 2

实例代码如下

    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 0;
        c = a + b;
        System.out.println("c = a + b = " + c );
        c += a ;
        System.out.println("c += a  = " + c );
        c -= a ;
        System.out.println("c -= a = " + c );
        c *= a ;
        System.out.println("c *= a = " + c );
        a = 10;
        c = 15;
        c /= a ;
        System.out.println("c /= a = " + c );
        a = 10;
        c = 15;
        c %= a ;
        System.out.println("c %= a  = " + c );
        c <<= 2 ;
        System.out.println("c <<= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c &= a ;
        System.out.println("c &= a  = " + c );
        c ^= a ;
        System.out.println("c ^= a   = " + c );
        c |= a ;
        System.out.println("c |= a   = " + c );
    }

输出结果如下:

c = a + b = 30
c += a  = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a  = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a  = 0
c ^= a   = 10
c |= a   = 10

条件运算符

没错,这个条件运算符就是大名鼎鼎的三目运算符,该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

variable x = (expression) ? value if true : value if false

 我们来实操一下

public static void main(String[] args) {
        String s1 = 1>0 ? "1>0为真":"1>0为假";
        String s2 = 1<0 ? "i<0为真":"1<0为假";
        System.out.println(s1);
        System.out.println(s2);
    }

输出结果如下:

1>0为真
1<0为假

当?前的表达式为真,则将?后第一个值赋值给s1,当?前的表达式为假,则将?后第二个值赋值给s2。

这样用的好处就是更加方便,不然你就得写一个if去判断然后赋值。

 

以上就是所有关于java运算符的知识,To  Be  Continue!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值