zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java基础:运算符篇

JAVA基础 运算符
2023-06-13 09:12:22 时间

Java基础:运算符篇

1.运算符根据用法不同分为以下八种

算术运算符

赋值运算符

关系运算符(比较)

逻辑运算符

位运算符

三元运算符(条件)

(1)算术运算符(这里只讲一些特殊用法)

运算符

详解

实例

结果

+

其用法主要分三个方面:1.表示正数;2.两边数字相加;3.拼接(将两边字符串拼接)

1.表示正数 :+(-2);2.表示数字相加:两边必须都是整型;3.讲两边字符串进行拼接处理;

1.将负数转换为正数(2)2.若”+“两边其中一个是字符型“+”将作为字符串连接符使用(也就是第三个用法);3.在**(1.1)**处详解;

-

1.表示负数;2.减法运算符

1.可以将正数转换为负数,或直接声明负数;2.减法运算,”-“两边必须都是整型

*

两边必须都是整型

/

两边必须都是整型

0不可以作为除数进行运算会报错

%

取模运算(取余)

两边必须都是整型;取“%”前面的数除以后面的数的余数

在**(1.2)**处详解;

++

自增

自增分为前自增和后自增(i)(i)

在**(1.3)**处详解;

自减

(i–)(–i)

在**(1.3)**处详解

(1.1)“+”拼接字符串详解

//+既可以做拼接字符处理,也可以做加法运算符,在java中优先级是怎样的
    System.out.println("6+7="+6+7);
	System.out.println(6+7+"=6+7");
//结果;
	6+7=67
	13=6+7
//如果第一个+做拼接字符串处理那么同一语句后面的+都当做拼接运算
//但是如果+在拼接运算前面则不受影响;

(1.2)“%”取模运算详解

//测试
		System.out.println(70%7);
        System.out.println(70%6);
        System.out.println(70%90);
        System.out.println(70%100);
        System.out.println(0%70);
        System.out.println(70%0);
//结果
0
4
70
70
0
Exception in thread "main" java.lang.ArithmeticException:
//扩展:java.lang.ArithmeticException
//数学运算异常,类似上面0作为除数进行取模会出现该错误

(1.3)“++”“–”运算详解

//首先要知道i++与++i的结果和i+1是一样的
//但是i++要比i+1效率高
		int i=0;
        int j=i++;//这一语句相当于   int j=i; i=i+1;
        System.out.println("i="+i+"-----j="+j);

        int a=0;
        int b=++a;//这一语句相当于    a=a+1; b=a;
        System.out.println("a="+a+"-----b="+b);
//结果
		i=1-----j=0
		a=1-----b=1
//也就是说i++相当于先将i进行赋值再运算i+1
//++i则是先运算再赋值;
//--同上

(2)赋值运算符

运算符

运算

实例

结果

=

赋值

int a=4; String b=“java学习”;

将4赋值给a将字符串赋值给b

+=

加等于

a=3;b=2;a+=b;(a=a+b下同)

a=5;b=2;

-=

减等于

a=3;b=2;a-=b;

a=1;b=2;

*=

乘等于

a=3;b=2;a*=b;

a=6;b=2;

/=

除等于

a=3;b=2;a/=b;

a=1;b=2;

%=

模等于

a=3;b=2;a%=b;

a=1;b=2;

(3)关系运算符

运算符

含义

说明

实例

结果

>

大于

只支持左右两边操作数是数值类型。如果前面变量的值大于后面变量的值, 则返回 true。

2>3

false

>=

大于或等于

只支持左右两边操作数是数值类型。如果前面变量的值大于或等于后面变量的值, 则返回 true。

4>=2

true

<

小于

只支持左右两边操作数是数值类型。如果前面变量的值小于后面变量的值,则返回 true。

2<3

true

<=

小于或等于

只支持左右两边操作数是数值类型。如果前面变量的值小于或等于后面变量的值, 则返回 true。

4<=2

false

==

相等

如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值相等,也都将返回 true。如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象(内存地址)就会返回 false。Java 也支持两个 boolean 类型的值进行比较。

4497’a’5.05truefalseInteger i=new Integer(0); Integer a=new Integer(0); i==a

truetruetruefalsefalse

!=

不相等

如果进行比较的两个操作数都是数值类型,无论它们的数据类型是否相同,只要它们的值不相等,也都将返回 true。如果两个操作数都是引用类型,只有当两个引用变量的类型具有父子关系时才可以比较,只要两个引用指向的不是同一个对象(内存地址)就会返回 true。

4!=2

true

(4)逻辑运算符

运算符

用法

含义

说明

实例

结果

&&

a&&b

短路与

ab 全为 true 时,计算结果为 true,否则为 false。只有两边条件都为真时结果才为真;

2>1&&3<4

true

||

a||b

短路或

ab 全为 false 时,计算结果为 false,否则为 true。只要一边条件为真时结果就为真;

2<1||3>4

false

!a

逻辑非

a 为 true 时,值为 false,a 为 false 时,值为 true

!(2>4)

true

逻辑运算符还有**逻辑与(&)逻辑或(丨)**在位运算符中讲;

(什么是短路:如果第一个条件不符合则不执行后面的条件)

  //短路测试
        int i = 0;
        boolean a = i==1 && ++i==1;
        System.out.println(a);
        System.out.println(i);


        int j = 0;
        boolean b = i==0 && ++j==1;
        System.out.println(b);
        System.out.println(j);

//结果
false
0
true
1

(5)位运算符

位运算符相当于二进制运算符

而且位运算符不能对float、double、Boolean进行位运算

在Java语言中,提供了7种位运算符,分别是按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、带符号右移(>>)和无符号右移(>>>)

其中只有 ~ 是单目运算符

按位与(&):

就是将两个变量的二进制进行比较;

比较都为1则返回1,一个为0则返回0;

详细点:

//先提出问题这两句语句会打印出什么?		
		int i=13;
        System.out.println(i&14);
//首先算一下13的二进制(算法可以百度)
//这里得出i的二进制:00001101   再计算出14的二进制00001110
//13:00001101
//14:00001110
//按位与运算就是将每一位二进制进行比较,都为1则为1
//这样得出:00001100
//那么将00001100转换为10进制就是System.out.println(i&14);的结果
12
按位或(丨)

比较二进制一个为1则返回1,都为0则返回0;

		int i=13;
        System.out.println(i|14);
//13:00001101
//14:00001110
//根据上面的规则得到:00001111
//会打印15
按位与(&)按位或(丨)和逻辑与(&)逻辑或(丨)

首先写法上相同,只是两边的变量不同,

对于两个逻辑量,

true&true

也是按照二进制进行比较的,只是如果相同,根据上面的规则肯定也十分返回true,与短路与只是差了短路而已,所以也叫逻辑与;

逻辑或同理;

按位异或(^)

比较二进制两个相同则返回0,不同则返回1

按位异或也可以当做逻辑运算符使用【就是说当一个条件为真另一个为假,则返回true,否则false】

		int i=13;
        System.out.println(i^14);
//13:00001101
//14:00001110
//根据上面的规则得到:00000011
//结果3
取反(~)

单目运算符:只需要一个变量进行运算

见名知意,将其二进制1换成0,0换成1

//13:00001101
 System.out.println(~13);
//1111001
//二进制中还存在正负数分别用1,0表示
//结果可以试一下,想一下原因
左移(<<)带符号右移(>>)

左移:将其二进制向左移动n位

//13:00001101
System.out.println(13<<2);
//移动后补位0
//移动后:00110100转换成10进制为52
//左移规律:每向左移动一位则相当于其十进制乘以2,13<<2要比13*2*2效率高

带符号右移:将其二进制向右移动n位

//13:00001101
System.out.println(13>>2);
//移动后补位0
//移动后:00000011转换成10进制为3
//右移规律:每向右移动一位则相当于其十进制除以2

负数有符号右移计算-4>>2

    首先我们需要取得-4的补码 补码为反码+1

    反码为正码按位取反

    由正码0000 0100  取反得

    1111 1011

    再+1得

    1111 1100

    右移两位,符号位为1,所以高位置1得

    1111 1111

    此时减一得补码

    1111 1110

    补码转正码得

    0000 0001

    十进制为1,加负号得

    -1
无符号右移(>>>)

与右移相同,左边都用0补位 不管符号是什么;

(6)三元运算符

由(?:)符号表示的,具体的含义其实就和if-else结构的含义差不多,这种运算符会将某个条件作两种处理,如果满足条件的话就执行第一个结果,如果不满足的话就执行另外一个结果,例如: Int A,B,C; A=2; B=3; C=A>B ? 100 :200; 这条语句的意思是,如果A>B的话,就将100赋给C,否则就将200赋给C;