操作符

Posted songchj-bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作符相关的知识,希望对你有一定的参考价值。

java操作符包含以下几类:

赋值操作符:=

算数操作符: +, -, *, /, % 

自增自减操作符:++, --

关系操作符:>, <, >=, <=, ==, !=

逻辑操作符:&&, ||, !

按位操作符:&, |, ~(非), ^(异或)

移位操作符:<<, >>, >>>

三元操作符:if -else

上述这些操作符基本都只用于操作基本类型。 =, ==, !=可以操作所有的对象, +, += 可以操作String。

操作符的优先级:只记住了 * / % 高于 + -,记不住的用()括起来,先计算

分别介绍下各个操作符用法

赋值操作符(=):

主要有两种情况操作基本类型,操作对象。

用例子来说明下:

public class Alias {
    int x;
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println("a:" + a);
        System.out.println("b:" + b);
        a = b;
        System.out.println("a:" + a);
        System.out.println("b:" + b);
        a = 3;
        System.out.println("a:" + a);
        System.out.println("b:" + b);

        Alias alias1 = new Alias();
        Alias alias2 = new Alias();
        alias1.x = 1;
        alias2.x = 2;
        System.out.println("alias1.x=" + alias1.x);
        System.out.println("alias2.x=" + alias2.x);
        alias1 = alias2;
        System.out.println("alias1.x=" + alias1.x);
        System.out.println("alias2.x=" + alias2.x);
        alias1.x = 10;
        System.out.println("alias1.x=" + alias1.x);
        System.out.println("alias2.x=" + alias2.x);


    }
}

结果:

a:1
b:2
a:2
b:2
a:3
b:2
alias1.x=1
alias2.x=2
alias1.x=2
alias2.x=2
alias1.x=10
alias2.x=10

把int类型换成String,会的到同样的结果,java中String类型是不可变的对象

总结:

当赋值语句操作基本类型和Sring时(或者说不可变类型),改变左值(等号左边的变量)不会影响右值(等号右边的变量);

当赋值语句操作对象时(可变的对象),改变左值,右值也会随之变化。

算数操作符(++, --):

运算方式和数学中的+ - * / %一样。java中可以和赋值操作符"="连接,如:+=, -=, 同时进行运算和赋值。

int a = 1;
int b = 2;
a += b;

自增自减操作符(++, --):

自身增加/减少一个单位,分为前缀式 ++a和后缀式a++ 两种。前缀式:加一后,然后使用a的值。后缀式:先使用a的值,然后a再加一。

int a = 1;
int b = 2;
System.out.println(++a + b);
System.out.println(a++ + b);

输出:

  4
  4

关系操作符(>, <, >=, <=, ==, !=):

主要用于基本类型,用于对象可能会很难理解(两个对象比较大小,两个人如何比较大小,看名字,年龄吗?)或者产生无法预估的错误(即对象的值都相等,两个对象也不相等)。

逻辑操作符(&&, ||, !):

只能用来操作布尔值(true,false),java中不能用数值表示真假(python中非0表示真,0表示假)。

&&:都是真,则表达式为真 

||:有一个为真,则表达式为真

!:操作数为假,则表达式为真;操作数为真,则表达式为假

短路:一旦能确认整个表达式的值,就不再计算余下部分。

第一次打印:a > 1 为false,整个表达式确定就是false,后面的++b > 2不会被执行(因为b的值没有变化,依然是2)

第二次打印:++b > 2 为true(b的值加一,变成3), a > 1 为false,整个表达式的值为false

int a = 1;
int b = 2;
System.out.println(a > 1 && ++b > 2 );
System.out.println("b=" + b);
System.out.println(++b > 2 && a > 1);
System.out.println("b=" + b);

输出:

  false
  b=2
  false
  b=3

按位操作符(&, |, ~(非), ^(异或)):

用来操作整数中的单个bit,对其做布尔运算,然后生成一个结果。

&:两个输入位都是1,则输出1

|:又有个输入位是1,则输出1

^:输入位相同(都是1,或者都是0),输出0;输入位不同,输出1;

~:取反操作,即输入位是1,则输出0;输入位是0,则输出1

可以和"="连起来使用,运算并赋值 &=, |=, ^= (~是一元运算符,不可以和=相连使用)

int a = 7;
int b = 5;
System.out.println("a = " + Integer.toBinaryString(a));
System.out.println("b = " + Integer.toBinaryString(b));
System.out.println("a & b = " + Integer.toBinaryString(a & b));
System.out.println("a | b = " + Integer.toBinaryString(a | b));
System.out.println("a ^ b = " + Integer.toBinaryString(a ^ b));
System.out.println("~a = " + Integer.toBinaryString(~a));

输出:
a = 111
b = 101
a & b = 101
a | b = 111
a ^ b = 10
~a = 11111111111111111111111111111000

 

移位操作符(<<, >>, >>> ):

移位操作符的运算对象也是二进制的“位”。

<<:左移位操作符,把操作符左边的的数向左移动n位(n是操作符右边的数),低位补0

>>:“有符号”右移位操作符,把操作符左边的数向右移动n位(n是操作符右边的数),若符号为正,则高位补0;若符号为负,则高位补1。

>>>:“无符号”右移位操作符,无论正负,都在高位补0

移位操作符可以"="组合使用, <<=, >>=, >>>= 

说明:java中没有无符号的数,即所有的数都区分正负

int a = 7;
int b = -7;
System.out.println("a = " + a + ", " + Integer.toBinaryString(a));
System.out.println("b = " + b + ", " + Integer.toBinaryString(b));
System.out.println("a << 2 = " + (a << 2) + ", " + Integer.toBinaryString(a << 2));
System.out.println("b << 2 = " + (b <<2 ) + ", " + Integer.toBinaryString(b << 2));
System.out.println("a >> 2 = " + (a >> 2) + ", " + Integer.toBinaryString(a >> 2));
System.out.println("a >>> 2 = " + (a >>> 2) + ", " + Integer.toBinaryString(a >>> 2));
System.out.println("b >>> 2 = " + (b >>> 2) + " , " + Integer.toBinaryString(b >>> 2));

输出:
a = 7, 111
b = -7, 11111111111111111111111111111001
a << 2 = 28, 11100
b << 2 = -28, 11111111111111111111111111100100
a >> 2 = 1, 1
a >>> 2 = 1, 1
b >>> 2 = 1073741822 , 111111111111111111111111111110

三元操作符(if-else):

boolean-exp ? exp1 : exp2

如果boolean-exp为true,计算exp1的值,否则计算exp2的值

 









以上是关于操作符的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode 如何操作用户自定义代码片段(快捷键)

代码片段 - Golang 实现集合操作

Apollo Codegen 没有找到生成代码的操作或片段

操作栏标签片段中的片段?

C#程序员经常用到的10个实用代码片段 - 操作系统