数据类型与运算符 - 运算符
运算符
-
- 运算符作用:计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操作变量。
- 一元运算符 - 运算规则:
- ++(自增)--(自减):
int a = 1; int b = a++; //a先赋值给b,再自增 System.out.prinln("a=" + a + "\nb=" + b); //此时输出 a=2,b=1 int a = 1; int b = ++a; //a先自增,再赋值给b System.out.prinln("a=" + a + "\nb=" + b); //此时输出 a=2,b=2
- ++(自增)--(自减):
- 二元运算符 - 运算规则:
- 整数运算:
- 如果两个操作数有一个为long,则结果也为long。
- 没有long时,结果为int,即使操作数全为short,byte,结果也是int。
- 浮点运算:
- 如果两个操作数有一个为double,则结果为double。
- 只有两个操作数都是float,则结果才为float。
- 取模运算:
- 其操作数一般是整数,也可以为浮点数,结果是“余数”,“余数”正负和取模运算符左边操作数相同,例如:7%3=1;-7%3=-1;7%-3=1。
- instanceof运算符:
- 其操作数左边是对象,右边是类;当对象是右边类或子类所创建的对象时,返回true;否则返回false。
public class Test { public static void main(String[] args) { Person p = new Person(); System.out.println(p instanceof Person); //p是Person的对象,返回true } } class Person{}
- 其操作数左边是对象,右边是类;当对象是右边类或子类所创建的对象时,返回true;否则返回false。
- 整数运算:
- 赋值运算符 - 运算规则:
- 将赋值运算符右边的值赋给左边。
int a = 3; //将3赋给变量a int b = a; //将a赋给变量b System.out.println("a=" + a + "\nb=" + b) //输出后 a=3,b=3
- 将赋值运算符右边的值赋给左边。
- 扩展运算符 - 运算规则:
- 将扩展运算符左边与右边进行 + - * / % 后赋值给左边。
int a = 1; int b = 2; b+=a; //这里相当于 b=b+a,赋值后b=3 b-=a; //这里相当于 b=b-a b*=a+3; //这里相当于 b=b*(a+3),先算a+3再算b*a,赋值后b=8
- 将扩展运算符左边与右边进行 + - * / % 后赋值给左边。
- 关系运算符 - 运算规则:
- 关系运算符用来进行比较运算,运算结果只有true和false。
int a = 3; System.out.println(a==3); //这里会判断a是否等于3,如果是输出true System.out.println(a!=5); //这里会判断a是否不等于5,如果是输出true char b = 'a'; char b2 = 'c'; System.out.println(b<b2); //在这里char会被转为int类型来进行运算 System.out.println((int)b); //可以利用强制转型查看对应的int数值
==、!= 是所有(基本和引用)数据类型都可以使用
>、>=、<、<= 仅针对数值类型 byte/short/int/long、float/double、char
- 关系运算符用来进行比较运算,运算结果只有true和false。
- 逻辑运算符 - 运算规则:
- 逻辑运算符用来对比布尔值(boolean),计算结果也是布尔值(ture/false)。
boolean a = true; boolean b = false; System.out.println(a&b); //a和b有一个为false,则输出false System.out.println(a|b); //a和b有一个为true,则输出true System.out.println(!b); //单个值运算,取反,b为true输出false,b为false输出true System.out.println(a^b); //按断a和b是否相同,相同输出false,不同输出true System.out.println(1<3&&1>3); //为false,则输出false,从左到右计算,左边符合直接输出不计算右边,不符合则继续往后计算 System.out.println(1<3||1>3); //为true,则输出true,从左到右计算,左边符合直接输出不计算右边,不符合则继续往后计算
- 逻辑运算符用来对比布尔值(boolean),计算结果也是布尔值(ture/false)。
- 位运算符 - 运算规则:
- 位运算指的是将值转为二进制进行二进制运算。
- 运算符 &(与) 和 |(或) 既是逻辑运算符,也是位运算符,如果两侧操作数都是布尔类型,就作为逻辑运算符;如果两侧的操作数是整数类型,就是位运算符。
int a = 3; //数值3转为二进制是0011 int b = 4; //数值4转为二进制是0100 System.out.println(a&b); //将整数类型3和4转为二进制进行运算
- 「按位与」两个操作数必须都为true,才能为true,否则为false
- 「按位或」两个操作数只要有一个是true,结果就是true
- 「按位异或」两个操作数相同为false,不同为true
- 左移运算符与右移运算符分别代表乘2和除2。
int a = 100; System.out.println(a<<2); //位移2位,乘两次2,结果等于400 = (100*2)*2 System.out.println(a>>2); //位移2位,乘两次2,结果等于25 = (100/2)/2
- 字符串连接符 - 运算规则:
- 运算符“+”两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接,此处“+”不作为算数运算符,而作为字符串连接符进行运算。
int a = 12; System.out.prinln("a=" + a); //输出结果:a=12
- 运算符“+”两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接,此处“+”不作为算数运算符,而作为字符串连接符进行运算。
- 条件运算符 - 运算规则:
- 条件运算符格式“x:y:z”,其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则运算结果为y,否则结果为 z 。
int score = 80; //定义一个值 String type = score<60?"不及格":"及格"; //值score的值是否小于60,为true输出“不及格”,为false输出及格。 System.out.prinln("最终成绩:" + type);
- 条件运算符格式“x:y:z”,其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则运算结果为y,否则结果为 z 。
- 运算符的优先级:
- 建议使用括号运算符来组织表达式。
- 切记,逻辑与/或/非的优先级是逻辑非>逻辑与>逻辑或,如:a||b&&c的运算结果是:a||(b&&c),而不是(a||b)&&c。
序号 运算符 说明 顺序 1 () 括号运算符 由左至右 2 !、+(正号)、-(负号) 一元运算符 由左至右 2 ~ 位逻辑运算符 由右至左 2 ++、-- 递增与递减运算符 由右至左 3 *、/、% 算术运算符 由左至右 4 +、- 算术运算符 由左至右 5 <<、>> 位左移、右移运算符 由左至右 6 >、>=、<、<= 关系运算符 由左至右 7 ==、!= 关系运算符 由左至右 8 & 位运算符、逻辑运算符 由左至右 9 ^ 位运算符、逻辑运算符 由左至右 10 | 位运算符、逻辑运算符 由左至右 11 && 逻辑运算符 由左至右 12 || 逻辑运算符 由左至右 13 ? : 条件运算符 由右至左 14 =、+=、-=、*=、/=、%= 赋值运算符、扩展运算符 由右至左