目录
一、什么是运算符
运算符就是计算机对操作数进行的操作的符号,就像是数学中的各种运算有不同的符号一样,运算符也是这样。运算符也有很多种类如算术运算符(+加、-减、*乘、/除、%取余)、关系运算符(==等、!=不等、>、<、>=、<=)、逻辑运算符(&&逻辑与、||逻辑或、!逻辑非)、位运算符(&与、|或、^亦或、~按位取反、<<左移运算符、>>右移运算符、无符号右移>>>)、赋值运算符(=)、复合赋值运算符(+=、-=、*=……)、条件运算符(表达式?表达式:表达式)、instanceof运算符(下一个博客讲)。
二、算数运算符
1.基本四则运算符(加减乘除模)
加+:
为什么不用a+b=30的形式呢?
因为如果在同一个println输出语句中,当前面最开始是字符串,那后面的变量或者表达式就会直接转换成字符串输出。
当然可以用a+b=30,其表达式直接加一个括号构成复合表达式即可就可以解决
减-、乘*:
除/、模%:
对于除法算术运算符和取模算数运算符中右边都不能为0,就是数学中的除数不能为0一样
对于除法算术运算符来说只要一边是浮点数,则输出均为浮点数
对于取余算数运算符中,除数和被除数均可以是浮点数也可以正常输出,但是没有任何意义,因为数学中取余只有整数取余。
2.增量运算符(++、--)
自增运算符(++)
+在前,先加后用
+在后,先用后加
为什么不直接使用a++,还要重新定义一个c=10?
因为之前的++a让a变成了11,再用a++,其值会是11,不好具体让我们观察其变性,直接找到一个数更直观。
public class TestOperator {
public static void main(String[] args) {
int a = 10;
System.out.println(a);
int b = ++a;
System.out.println("++10="+b);
int c = 10;
System.out.println(c);
int d = c++;
System.out.println("10++="+d);
}
}
自减运算符(--)
+在前,先加后用
+在后,先用后加
(这个与++原理是一样的)
三、关系运算符
关系运算符(==等、!=不等、>、<、>=、<=)一般都在if条件语句中用到
比较结果为Boolean类型的true或false
public class TestOperator {
public static void main(String[] args) {
int a = 20;
int b =39;
boolean c = (a >= b);
System.out.println("boolean c="+c);
if(a == b) {
System.out.println("a=b");
}else if (a < b) {
System.out.println("a<b");
}else {
System.out.println("a>b");
}
}
}
四、逻辑运算符
逻辑运算符(&&逻辑与、||逻辑或、!逻辑非)也同样是用于if条件语句中的多一些
语法规则:表达式1 && 表达式 2(两边的表达式都是Boolean类型的)
1.&&与
&&逻辑与相当于数学中的且(p∧q),就是必须表达式左边为true且右边也为true,整个表达式才为true,若左边已经为false了,无论右边表达式为true或false,整个表达式都为false。
2.||或
||逻辑或也相当于数学中的逻辑或(p∨q),只要是其中一方为true,则整个表达式都为true。
3.!非
!逻辑非也也相当于数学中的逻辑非(¬p),就是把整个表达式的false变true,ture变false
public class TestOperator {
public static void main(String[] args) {
int a = 18;
int b = 21;
int c = 18;
if (a == b && a == c) {
System.out.println("三个数相等");
}else if (a == b || a == c || b == c ) {
System.out.println("三个中有两个相等");
}else {
System.out.println("没有相等的");
}
if(!(a == b)) {
System.out.println("a != b");
}
}
}
4.短路求值
&&和||遵循短路求值的规则
像10 / 0 == 0 该会导致程序抛出异常的代码造成代码编译错误
因为0 不能做除数
而&& 和 ||
在这个代码中能够正常的运行
为什么呢?
因为逻辑与&&的表达式1已经是false了为假了,所以已经不符合“且” p∧q = 1 这个式子了,无论右边是true或false,整个表达式(10 < 2 && 10 / 0 == 0)已经为false了。所以直接就输出false了
而逻辑或|| 的表达式1已经为true了为真了,所以直接不管后面直接输出真true了
这与高中数学学的且与或是一样的
五、位运算符
位运算符(&与、|或、^亦或、~按位取反、<<左移运算符、>>右移运算符、无符号右移>>>)
Java中数据存储最小的单位是字节Byte,而数据操作最小的单位是比特位bit,字节是最小的存储单位,一个Byte由8个bit构成,多个字节组合在一起就可以表示不同的数据。
位运算符除了~按位取反是一元运算符,其他都是二元运算符。
位操作表示按二进制位计算计算机中都是使用二进制表示数据的(01构成的序列),按位运算就是在按照二进制的每一位进行计算。
1.&与
如果两个数的二进制位都是1,则结果是1,否则结果是0。
2.|或
两个数的二进制位中只要有1,结果都是1。
3.^异或
两个数的二进制位相同则结果为0,不同为1。
4、按位取反~(一元)
该位数为0,则转为1,如果该位为1,则转为0。
注意:
1.Java中的十六进制是以0x或0X开头,后面跟由0到9及A到F(a到f)组成的数字序列,如0x1A表示十六进制1A(是以零x开头不是O),printf能够格式化输出内容,%x表示按照十六进制输出
println不适用
2.Java中的二进制是以0b或0B开头,后面跟由0和1组成的数字序列,如0b1010表示二进制1010。
3.Java中的八进制是以0开头,后面跟0到7的数字,如0123表示八进制123。
4.Java中的十进制直接写数字,如123。
六、移位运算符(<<左移、>>右移、>>>无符号右移)
1.<<左移
2.>>右移
3.>>>无符号右移
七、复合赋值算符(+=、*=、/=、%=……)
就是以上讲的与等号一起用,a += b就相当于 a = a + b,更加的便捷一点。
八、条件运算符(表达式?表达式:表达式)
表达式1?表达式2:表达式3
当表达式1的值为true,整个表达式的值为表达式2的值
当表达式1的值为false,整个表达式的值为表达式3的值
也是Java中唯一的一个三目运算符,是条件判断语句的简写。
注意:
1.表达式2和表达式3的结果要是同类型的,除非能够发行隐式类型转换
2.表达式不能单独存在,其产生的结果必须要被使用。
九、输入、输出
1.输出
输出在1.初识Java(Java的定义、结构、注释、标识符、关键字以及数据类型、输出、类型转换、字符串类型)
这一节中有讲到
2.输入
当我们在main方法中定义了个Scanner,创建了对象,代码顶部就会出现相关的Scanner文件,我们按住Ctrl键,鼠标点击Scanner则可以进入。
Ctrl键+fn+F12打开文件结构视图,可以看见Scanner类的结构, 可以快速浏览Scanner的结构
从键盘上输入整型、浮点型、字符串
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = scanner.nextLine();
System.out.println("请输入你的总成绩:");
int grade = scanner.nextInt();
System.out.println("请输入你的平均成绩:");
double averageGrade = scanner.nextDouble();
}
}
用Scanner循环读取N个数字求平均值
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/*使用Scanner循环读取N个数字求平均值*/
int sum = 0;
int num = 0;
System.out.println("请输入数:");
while (scanner.hasNextInt()) {
int tmp = scanner.nextInt();
sum += tmp;
num ++;
}
System.out.println("和为:"+sum);
System.out.println("平均数为:"+sum/num*1.0);
scanner.close();
}
}
注意事项:
当循环输入多个数据的时候,使用Ctrl键+z来结束输入(Windows上使用Ctrl键+z,Linux/Mac上使用Ctrl键+d)