Java中的运算符主要包括以下几类: 1. 算术运算符: - 加法运算符(+):将两个操作数相加。 - 减法运算符(-):将第一个操作数减去第二个操作数。 - 乘法运算符(*):将两个操作数相乘。 - 除法运算符(/):将第一个操作数除以第二个操作数。 - 取余运算符(%):取第一个操作数除以第二个操作数的余数。 2. 关系运算符: - 相等运算符(==):如果两个操作数相等,则返回true;否则返回false。 - 不等运算符(!=):如果两个操作数不相等,则返回true;否则返回false。 - 大于运算符(>):如果第一个操作数大于第二个操作数,则返回true;否则返回false。 - 小于运算符(<):如果第一个操作数小于第二个操作数,则返回true;否则返回false。 - 大于等于运算符(>=):如果第一个操作数大于等于第二个操作数,则返回true;否则返回false。 - 小于等于运算符(<=):如果第一个操作数小于等于第二个操作数,则返回true;否则返回false。 3. 逻辑运算符: - 与运算符(&&):当两个操作数都为true时,返回true;否则返回false。 - 或运算符(||):当两个操作数中有一个为true时,返回true;否则返回false。 - 非运算符(!):如果操作数为true,则返回false;如果操作数为false,则返回true。 4. 赋值运算符: - 简单赋值运算符(=):将右侧的操作数的值赋给左侧的操作数。 - 复合赋值运算符(+=、-=、*=、/=、%=):将右侧的操作数与左侧的操作数进行相应的运算,然后将结果赋给左侧的操作数。 5. 位运算符: - 与运算符(&):对两个操作数的每一个位进行与运算。 - 或运算符(|):对两个操作数的每一个位进行或运算。 - 异或运算符(^):对两个操作数的每一个位进行异或运算。 - 取反运算符(~):对操作数的每一个位进行取反运算。 - 左移运算符(<<):将操作数的每一个位向左移动指定的位数。 - 右移运算符(>>):将操作数的每一个位向右移动指定的位数。 - 无符号右移运算符(>>>):将操作数的每一个位向右移动指定的位数,移动后空出的位以0填充。 6. 三元运算符(?:)是一种简化if-else语句的表达式。它由三部分组成,中间用问号和冒号分隔,语法为:表达式1 ? 表达式2 : 表达式3。 其中,表达式1为条件表达式,如果为真,则执行表达式2并返回结果;如果为假,则执行表达式3并返回结果。三元运算符可以嵌套使用,用于多个条件的判断。 例如: int a = 5; int b = 10; int max = (a > b) ? a : b; 上述代码中,如果变量a大于变量b,则max的值为a;反之,max的值为b。 7. 自增自减运算符(++、--)用于增加或减少变量的值。它可以分为前缀形式和后缀形式。 前缀形式是在变量前面使用自增(++)或自减(--)运算符,语法为:++变量、--变量。它的特点是先执行自增或自减操作,再返回结果。 后缀形式是在变量后面使用自增(++)或自减(--)运算符,语法为:变量++、变量--。它的特点是先返回结果,再执行自增或自减操作。 例如: int a = 5; int b = ++a; 在这段代码中,变量a的值先自增1,然后赋值给变量b,所以b的值为6。 int c = 5; int d = c++; 在这段代码中,变量c的值先赋值给变量d,然后再自增1,所以d的值为5。 自增自减运算符还可以用于表达式中的运算,例如: int a = 5; int b = 10; int sum = a++ + --b; 在这段代码中,变量a的值先赋值给sum,然后再自增1;变量b的值先自减1,然后再与sum相加。所以sum的值为15,a的值为6,b的值为9。 public class Test01 { public static void main(String[] args) { //算术运算符+-*/% int a = 9; int b = 7; int c = 0; c = a + b; System.out.println(c); c = a - b; System.out.println(c); c = a * b; System.out.println(c); c = a / b;//向零取整 System.out.println(c); c = a % b; System.out.println(c); //遵循正常的数学规律,负负得正 System.out.println(9/4); System.out.println(9/-4); System.out.println(-9/4); System.out.println(-9/-4); //取余的结果,看的是被除数的符号,被除数是正结果为正,被除数是负结果为负 System.out.println(9%4); System.out.println(9%-4); System.out.println(-9%4); System.out.println(-9%-4); } } public class Test02 { public static void main(String[] args) { //复合赋值运算符 int a = 9; int b = 5; b += a;//等价于b = b + a ; System.out.println("b = " + b);//14 b -= a;//等价于b = b - a ; System.out.println("b = " + b);//5 b *= a;//等价于b = b * a ; System.out.println("b = " + b);//45 b /= a;//等价于b = b / a ; System.out.println("b = " + b);//5 b %= a;//等价于b = b % a ; System.out.println("b = " + b);//5 //面试题:+号的作用 //1.算术运算符:进行算术运算,+左右两侧都是操作数 //2.字符串连接符,进行字符串拼接,+左右两侧只要有一侧是字符串就是字符串连接符 //3.+表示正号(不写) System.out.println(6+6+6+"6"); System.out.println(6+6+"6"+6); System.out.println(6+"6"+6+6); System.out.println("6"+6+6+6); /** *面试题:问下列代码有错误吗,如果有说出错误,如果没有则输出结果 * byte a = 127; * a += 1; * a = a + 1; * 答:上述第三行代码报错,原因是1是int类型的数据,在进行计算的时候会将a+1 * 全部转换为int类型进行计算,计算完再给a赋值的时候会发生报错,所以修改后的 * 代码是a=(byte)(a+1);第二句不报错的原因是a+=1,实质等价于 * a+=(byte)(a+1);默认带强制转换所以不报错,修改后输出时发现数值超过了byte *的数据类型的取值范围,发生了数据溢出 * 解决方法跟上述一致,所以输出结果是-127。 */ } }
public class Test03 { public static void main(String[] args) { int a = 9; //后序增 a++; //前序增 ++a; //后序减 a--; //前序减 --a; //++--符号在前就是前序,在后就是后序 //前序增减:先运算在赋值 //后序增减:先赋值在运算 a = 5; int b = 0; b = a++; System.out.println("a = "+ a +" b = "+b); b = ++a; System.out.println("a = "+ a +" b = "+b); b = a--; System.out.println("a = "+ a +" b = "+b); b = --a; System.out.println("a = "+ a +" b = "+b); int x = 5; int y = ++x; int z = y-- + ++x; x = 7; y = x--; System.out.println("x = " + x); System.out.println("x = " + y); System.out.println("z = " + z); System.out.println("z = " + z++); System.out.println("z = " + (++z)); } }
public class Test04 { public static void main(String[] args) { //关系运算符 int a = 7; int b = 9; //返回值都是boolean类型的值 System.out.println(a==b); System.out.println(a!=b); System.out.println(a>b); System.out.println(a<b); System.out.println(a>=b); System.out.println(a<=b); } }
public class Test05 { public static void main(String[] args) { int a = 0,b = 4,c = 5; //面试题:&&和&的区别 //答:相同点:都可以作为逻辑运算符进行逻辑运算,左右两侧都是boolean类型的值, //当左右两侧都为真的时候,结果为真,否则结果为假。 //不同点:作为逻辑运算符时,&&为短路与,左侧为false的时候,右侧代码不运行, // 而&不管左侧是否为false,右侧都会正常执行。 //&还可以作为位运算符进行位运算 if (b>c&&(a=3)>2){ a = 1; b = 0; c = 0; } System.out.println(a); } }
public class Test06 { public static void main(String[] args) { //位运算最好的理解方式是转成二进制进行计算 int a = 16;//0001 0000 int b = 15;//0000 1111 int c = a & b;//0000 0000 System.out.println(c);//0 int d = a | b;//0001 1111 System.out.println(d);//31 //异或,相同的为假,不同的为真 int e = a ^ b;//0001 1111 System.out.println(e);//31 //面试题:如何将2快速的变成16 //<<左移0000 0010->0001 0000 System.out.println(2<<3); } }
public class Test07 { public static void main(String[] args) { //条件运算符,Java中唯一的条件运算符 //x?y:z //x为boolean类型的表达式,如果x为true,则输出y的值,否则输出z的值 int score= 68; //String表示的是字符串类型 String result = score>60?"及格":"不及格"; System.out.println(result); } }
public class test08 { //main回车或者psvm回车 public static void main(String[] args) { //sout回车 System.out.println(); Scanner sc = new Scanner(System.in); //next()和nextLine()都是用于接收字符串的 String s1 = sc.next(); //nextLine()可以接收空格回车等特殊符号 String s2 = sc.nextLine(); String s3 = sc.next(); System.out.println(s1); System.out.println(s2); System.out.println(s3); } }