计算机的最基本用途之一就是执行数学运算,做为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。
运算符和表达式是Java程序的基本组成要素。运算符是一种特殊的符号(在程序中可以进行特定操做的符号),用以表示数据的运算,赋值和比较。不一样的运算符用来完成不一样的运算。
java语言使用运算符将一个或者多个操做数连缀成执行性语句,造成表达式,表达式是由运算符和操做数按必定语法规则组成的符号序列(是由运算符链接起来的式子叫作表达式)。
运算符按照其要求的操做数数目来分,能够有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操做数。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和三目运算符等。java
算术运算符主要用于进行基本的算术运算,如加法、减法、乘法、除法等。
Java 中经常使用的算术运算符:算法
算术运算符 | 含义 |
---|---|
+ | 加法运算 、字符串拼接运算、正数 |
- | 减法运算、负数 |
* | 乘法运算、通配符 |
/ | 除法运算(求商数) |
% | 除法运算(求余数) |
++ | 自加1 |
-- | 自减1 |
其中,++和--既能够出如今操做数的左边,也能够出如今右边,但结果是不一样的。能够进行单独使用,也能够混合使用。
备注:若是变量在++运算符的左边,那么在运算过程当中,先进行自身加1,在执行++运算,变量在++运算符的右边,那么在运算过程当中,先进行那么先使用原先的数值,再执行++运算符左边的算法。
对于整数的表达式来讲,除法用的是整除,求的是商数,结果任是整数
一旦运算中出现了不一样的数据类型,那么结果将会是数据类型范围大的那种
说明:无论变量是在++或--运算符的左边仍是右边,对于该变量自己都会作自+1或-1运算。
注意:必定要注意哦!自增和自减运算符只能用于操做变量,不能直接用于操做数值或常量!例如 5++ 、 8-- 等写法都是错误滴!
% 用来求余数,也称为”取模运算符“
例子:ide
public class HelloWorld{ public static void main(String[] args) { int age1=24; int age2=18; int age3=36; int age4=27; int sum=age1+age2+age3+age4; double avg=sum/4; int minus=Math.abs(age1-age2); int newAge=--age1; System.out.println("四个年龄的总和:"+sum); System.out.println("四个年龄的平均值:"+avg); System.out.println("age1 和 age2年龄差值:"+minus); System.out.println("age1自减后的年龄:"+newAge); } }
赋值运算符是指为变量或常量指定数值的符号。如可使用 “=” 将右边的表达式结果赋给左边的操做数。
Java 支持的经常使用赋值运算符,以下表所示:code
运算符 | 名称 | 举例 |
---|---|---|
= | 赋值 | 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 |
备注:
1.=是基本的赋值运算符
2.剩下的都是符合赋值运算符
3.只有变量才可使用赋值运算符,常量不能进行赋值
4.复合赋值运算符其中隐含了一个强制类型转换
例子:对象
public class HelloWorld{ public static void main(String[] args) { int one = 10 ; int two = 20 ; int three = 0 ; three=one+two; System.out.println("three = one + two ==> "+three); three+=one; System.out.println("three += one ==> "+three); three-=one; System.out.println("three -= one ==> "+three); three*=one; System.out.println("three *= one ==> "+three); three/=one; System.out.println("three /= one ==> "+three); three%=one; System.out.println("three %= one ==> "+three); } }
比较运算符用于判断两个数据的大小,例如:大于、等于、不等于。比较的结果是一个布尔值( true 或 false )。
Java 中经常使用的比较运算符以下表所示:three
比较运算符 | 名称 | 例子 | 结果 |
---|---|---|---|
> | 大于比较 | a=3;b=1;a>b | true |
< | 小于比较 | a=3;b=1;a<b | false |
>= | 大于等于比较 | a=3;b>=1 | true |
<= | 小于等于比较 | a=3;b=1;a<=b | false |
== | 相等比较 | a=3;b=1;a==b | false |
!= | 不等于比较 | a=3;b=1;a!=b | true |
注意哦:
一、 > 、 < 、 >= 、 <= 只支持左右两边操做数是数值类型
二、 == 、 != 两边的操做数既能够是数值类型,也能够是引用类型
三、>=、<=该运算符运算过程当中只要知足其中一种情形结果即为true
四、若是进行屡次判断,不能连着写。内存
public class HelloWorld{ public static void main(String[] args) { int a=16; double b=9.5; String str1="hello"; String str2="imooc"; System.out.println("a等于b:" + (a == b)); System.out.println("a大于b:" + (a > b)); System.out.println("a小于等于b:" + (a < b)); System.out.println("str1等于str2:" + (str1.equals(str2))); } }
ps: 一、java中equals和==的区别 值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其自己则存储在堆中。
二、==操做比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
三、equals操做表示的两个变量是不是对同一个对象的引用,即堆中的内容是否相同。
四、==比较的是2个对象的地址,而equals比较的是2个对象的内容,显然,当equals为true时,==不必定为true。字符串
逻辑运算符主要用于进行逻辑运算。Java 中经常使用的逻辑运算符以下表所示:数学
逻辑运算符 | 名称 | 例子 | 结果 |
---|---|---|---|
与 | && | a&&b | 若是a与b都为true,则返回true |
或 | a | b | 若是a与b任一为true,则返回true |
非 | ! | !a | 若是a为flase,则返回true,即取反 |
异域 | ^ | a^b | 若是a和b有且仅有一个true,则返回true |
咱们能够从“投票选举”的角度理解逻辑运算符:
一、 与:要求全部人都投票赞成,才能经过某议题
二、 或:只要求一我的投票赞成就能够经过某议题
三、 非:某人本来投票赞成,经过非运算符,可使其投票无效
四、 异或:有且只能有一我的投票赞成,才能够经过某议题
注意:
&与&&的异同点:
相同点:都是作与运算
不一样点:&&能够实现断路(短路)
备注:短路效果,当&&符号左边的布尔型值能够肯定为false的时候,那么程序在执行到&&符号的时候,会发生跳跃,也就是&&后面的表达式程序不在执行
|与||的异同点:
相同点:都是作或运算
不一样点:||能够实现断路(短路)
备注:短路效果,当||符号左边的布尔型值能够肯定为true的时候,那么程序在执行到||符号的时候,会发生跳跃,也就是||后面的表达式程序不在执行
例子:it
public class HelloWorld { public static void main(String[] args) { boolean a = true; // a赞成 boolean b = false; // b反对 boolean c = false; // c反对 boolean d = true; // d赞成 //a与b都必需要赞成才能经过 System.out.println((a && b) + " 未经过"); //a与b必须有一人赞成才能经过 System.out.println((a || b) + " 经过"); //a为反对才能经过 System.out.println((!a) + " 未经过"); //c与d中必须有且只有一人赞成才能经过 System.out.println((c ^ d) + " 经过"); } }
条件运算符( ? : )也称为 “三元运算符”。
语法形式:布尔表达式 ? 表达式1 :表达式2
运算过程:若是布尔表达式的值为 true ,则返回 表达式1 的值,不然返回 表达式2 的值
第一种例子:
public class HelloWorld { public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a < b ? "a>b?": "a < b √"); } }
说明:将三目运算直接在输出语句中使用
第二种例子:
public class HelloWorld { public static void main(String[] args) { int a = 10; int b = 20; int c = a > b ? a : b; System.out.println(c); } }
说明:三目运算不在输出语句中使用
注意:
若是三目运算符是在输出语句中,那么对三目运算符的结果值真假类型不要求。
若是不是在输出语句中,在其余的语句中,如赋值运算语句,那么就须要严格控制三目运算符的结果值真假的数据类型,真假的结果值类型要一致,保持和赋值运算中的变量的数据类型一致
下表列出了位运算符的基本运算,假设整数变量A的值为60和变量B的值为13:
操做符 | 描述 | 例子 |
---|---|---|
& | 若是相对应位都是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 |
备注:位运算计算机底层采用的对整数进行二进制运算二进制转十进制为2的次幂累加和无符号右移对于正数来讲,空出来的最高位拿0补位没有无符号左移运算符