一、运算符介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
java中的运算符如下:
- 算数运算符
- 赋值运算符
- 关系运算符(比较运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
1.算数运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +3 | 3 |
- | 负号 | b=11; -b | -11 |
+ | 加 | 1+2 | 3 |
- | 减 | 3-1 | 2 |
* | 乘 | 2*3 | 6 |
/ | 除 | 12/4 | 3 |
% | 取模(取余) | 10/3 | 1 |
++n | 自增(前):先运算后取值 | a=2;b=++a | a=3;b=3 |
n++ | 自增(后):先取值后运算 | a=2;b=a++ | a=3;b=2 |
–n | 自减(前):先运算后取值 | a=2;b=–a | a=1;b=1 |
n– | 自增(后):先取值后运算 | a=2;b=a– | a=1;b=2 |
+ | 字符串相加 | “he”+“llo” | “hello” |
自增:++
作为独立的语句使用:
前++和后++都完全等价于 i = i + 1;
作为表达式使用:
前++: ++i先自增后赋值
后++: i++先赋值后自增
--、+、-、* 是一个道理,完全可以类推
练习题1(问结果是多少?为什么?)
int i = 1;
i = i++;//使用临时变量: temp = i; i = i+1; i = temp;
System.out.println(i);//1
练习题2(问结果是多少?为什么?)
int i = 1;
i = ++i//使用临时变量: i = i+1; temp = i; i = temp;
System.out.println(i);//2
2.关系运算符
运算符 | 运算 | 范例 | 结果 |
---|---|---|---|
== | 相等 | 2 == 3 | false |
!= | 不等 | 2 != 3 | true |
> | 大于 | 2 > 3 | false |
< | 小于 | 2 < 3 | true |
>= | 大于等于 | 2 >= 3 | false |
<= | 小于等于 | 2 <= 3 | true |
instanceof | 检查是否是类的对象 | “he” instanceof String | true |
注意事项:
关系运算符的结果都是boolean型,也就是要么是true,要么是false
关系运算符组成的表达式,我们称为关系表达式
比较运算符"==“不能误写成”="
3.逻辑运算符
名称 | 语法 | 特点 |
---|---|---|
短路与 && | 条件1 && 条件2 | 两个条件都为true,结果为true,否则为false |
逻辑与 & | 条件1 & 条件2 | 两个条件都为true,结果为true,否则为false |
&& 和 & 使用区别:
- && 短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
- & 逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
- 开发中,我们使用的基本是短路与 &&,效率高
名称 | 语法 | 特点 |
---|---|---|
短路或 || | 条件1 || 条件2 | 只要有一个条件为true,结果为true,否则为false |
逻辑或 | | 条件1 | 条件2 | 只要有一个条件为true,结果为true,否则为false |
|| 和 | 使用区别:
- || 短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
- | 逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
- 开发中,我们基本使用 ||
名称 | 语法 | 特点 |
---|---|---|
! 非(取反) | ! 条件 | 如果条件本身成立,结果为false,否则为true |
^ 逻辑异或 | 条件1 ^ 条件2 | 当两个条件不同时,则结果为true,否则为false |
练习题1:
//问 x=?,y=?
int x = 5;
int y = 5;
if (x++ == 6 & ++y == 6) x = 11;
System.out.println("x=" + x + ",y=" + y);
//问 x=?,y=?
int x = 5;
int y = 5;
if (x++ == 6 && ++y == 6) x = 11;
System.out.println("x=" + x + ",y=" + y);
//问 x=?,y=?
int x = 5;
int y = 5;
if (x++ == 5 | ++y == 5) x = 11;
System.out.println("x=" + x + ",y=" + y);
//问 x=?,y=?
int x = 5;
int y = 5;
if (x++ == 5 || ++y == 5) x = 11;
System.out.println("x=" + x + ",y=" + y);
练习题2:
//问 z=?
boolean x = true;
boolean y = false;
short z = 46;
if ((z++ == 46) && (y = true)) z++;
if ((x = false) || (++z == 49)) z++;
System.out.println("z= " + z);
答案:
x=6,y=6
x=6,y=5
x=11,y=6
x=11,y=5
z=50
4.赋值运算符
介绍:赋值运算符就是将某个运算后的值,赋给指定的变量
-
赋值运算符分类:
基本赋值运算符:=
复合赋值运算符:+= , -= , *= , /= , %=等
-
赋值运算符特点
1.运算顺序从右往左 int num = a + b;
2.赋值运算符的左边 只能是变量,右边可以是变量、表达式、常量式
3.复合赋值运算符等价于下面的效果
比如:a += 3; 等价于 a = a+3; 其它类推
4.复合赋值运算符会进行类型转换
byte b = 2;
b+=3; //相当于b = (byte)(b+3)
b++; //相当于b = (byte)(b+1)
5.三元运算符
基本语法:
条件表达式 ? 表达式1 : 表达式2;
运算规则:
1.如果条件表达式为true,运算后的结果是表达式1
2.如果条件表达式为false,运算后的结果是表达式2
演示:
int a = 10;
int b = 99;
int result = a > b ? a++ : b--;
System.out.println(a); //10
System.out.println(b); //98
System.out.println(result); //99
6.运算符优先级
如下表,运算符优先级的高低,从上到下依次排列
. () {} ; , |
---|
++ – ~ !(data type) |
*** / %** |
*** -** |
<< >> >>> 位移 |
< > <= >= instanceof |
== != |
& |
^ |
| |
&& |
|| |
? : |
*= = /= %= |
+= -= <<= >>= |
>>>= &= ^= |= |
7.键盘输入语句
介绍:在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取,需要一个扫描器(对象),就是Scanner
步骤:
-
导入该类的所在包,java.util.*
-
创建该类对象(声名变量)
-
调用里面的功能
import java.util.Scanner;
public class Demo12 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = myScanner.next();
System.out.println("请输入年龄:");
int age = myScanner.nextInt();
System.out.println("名字是" + name + ",年龄是" + age);
}
}
8.进制介绍
对于整数,有四种表示方式:
1.二进制:0,1,满2进1,以0b或0B开头
2.十进制:0-9,满10进1
3.八进制:0-7,满8进1,以数字0开头表示
4.十六进制:0-9及A(10)-F(15),满16进1,以0x或0X开头表示,此处A-F不区分大小写
9.原码、反码、补码
-
二进制的最高位是符号位:0表示正数,1表示负数
-
正数的原码、反码、补码都一样(三码合一)
-
负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
-
负数的补码=它的反码 +1,负数的反码=负数的补码 -1
-
0的反码,补码都是0
-
java没有无符号数,换言之,java中的数都是有符号的
-
在计算机运算的时候,都是以补码的方式来运算的(因为这样可以解决正数和负数的运算问题)
-
当我们看运算结果的时候,要看它的原码
10.位运算符
java中有7个位运算符(&、|、^、~、>>、<<、>>>)
分别是 按位与&、按位或|、按位异或^、按位取反~,它们的运算规则是:
- 按位& : 两位全为1,结果为1,否则为0
- 按位或| : 两位有一个为1,结果为1,否则为0
- 按位异或^ : 两位一个为0,一个为1,结果为1,否则为0
- 按位取反~ : 0->1,1->0
还有3个位运算符 >>、<<、和 >>>,运算规则:
- 算数右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
- 算数左移 <<:符号位不变,低位补0
- >>> 逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补 0