赋值运算符
赋值运算符:=
变量名 = 表达式; --》将表达式的结果通过赋值运算符=存储到变量中
表达式:表达式就是符号(如加号、减号)与操作数(如b,3等)的组合,例如
a+b ;3+5
那么如何借助变量以及赋值运算符实现两个数据的交换?
这里我们可以定义一个第三方变量,然后通过第三方变量来进行变量之间值的互换。
package cn.bdqn.demo03;
public class Demo02 {
public static void main(String[] args) {
// 如何借助变量以及赋值运算符实现两个数据的交换?
int num1 = 100;
int num2 = 200;
System.out.println("交换前:");
System.out.println("num1="+num1);
System.out.println("num2="+num2);
//如何实现交换? 借助第三方变量来实现交换
int temp = num1; //temp变量中存储的是100
num1 = num2; //num1 = 200
num2 = temp;
System.out.println("交换后:");
System.out.println("num1="+num1);
System.out.println("num2="+num2);
//扩展:面试题:使用4种方法实现两个变量中数据的交换。
}
}
算术运算符
基本算术运算符:+; -; ; / ; %(取模运算符/取余运算符) ;++(自增运算符); --(自减运算符 )。
复合算术运算符:+=;-=;=;/=;%=。
基本算术运算符
int num1 = 10;
int num2 = 3;
int result1 =num1+num2;
System.out.println("num1+num2="+result1);//num1+num2=13
int result2 =num1-num2;
System.out.println("num1-num2="+result2);//num1-num2=7
int result3 =num1*num2;
System.out.println("num1*num2="+result3);//num1*num2=30
int result4 =num1/num2;
System.out.println("num1/num2="+result4);//num1/num2=3
int result5 =num1%num2;
System.out.println("num1%num2="+result5);//num1%num2=1
针对单独的变量,++和–在变量前和变量后,变量的值都会+1或者-1操作
int a = 10;
System.out.println("a="+a);//a=10
a++;
System.out.println("a="+a);//a=11
++a;
System.out.println("a="+a);//a=12
int b = 100;
System.out.println("b="+b);//b=100
--b;
System.out.println("b="+b);//b=99
b--;
System.out.println("b="+b);//b=98
++和–修饰的变量参与运算时,++和–在变量前和变量后有没有区别呢?
- ++和–修饰的变量参与运算时,如果++和–在变量的前面,变量先进行++或者–操作,操作完毕后,再进行运算
- ++和–修饰的变量参与运算时,如果++和–在变量的后面,变量先去进行运算,然后再进行++或者–操作
int c = 200;
int d =++c;
System.out.println("c="+c);//c=201
System.out.println("d="+d);//d=201
int e = 300;
int f =e++;
System.out.println("e="+e);//e=301
System.out.println("f="+f);//f=300
复合算术运算符
复合算术运算符:+=; -= ;*=; /=; %=。
a+=b《===》a=a+b;
a-=b《===》a=a-b;
a*=b《===》a=a*b;
a/=b《===》a=a/b;
a%=b《===》a=a%b;
package cn.bdqn.demo04;
public class Demo02 {
public static void main(String[] args) {
/*
* 复合算术运算符:+= -= *= /= %=
*/
int a = 100;
// 将a增加100,然后将结果再赋值给
// a = a + 100;
//上面的写法可以使用复合算术运算符来写
a+=100;
System.out.println("a="+a);//a=200
a-=30;// a=a-30;
System.out.println("a="+a);//a=170
a*=2; // a=a*2;
System.out.println("a="+a);//a=340
a/=50; // a =a/50;
System.out.println("a="+a);//a=6
a%=4; // a=a%4;
System.out.println("a="+a);//a=2
}
}
示例:键盘输入四位数字的会员卡号,使用“/”和“%”运算符分解获得会员卡各个位上的数字,然后将各个位上数字求和。
package cn.bdqn.demo04;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
/*
* 键盘输入四位数字的会员卡号
* 使用“/”和“%”运算符分解获得会员卡各个位上的数字
* 将各个位上数字求和
*/
//创建Scanner类对象并导包
Scanner sc = new Scanner(System.in);
//输入数据
System.out.println("请输入你的会员卡号(4位的整数):");
int cardId =sc.nextInt();
System.out.println("你输入的会员卡号是:"+cardId);
//使用“/”和“%”运算符分解获得会员卡各个位上的数字
int geWei = cardId%10;
System.out.println("个位数字:"+geWei);
int shiWei = cardId/10%10;
System.out.println("十位数字:"+shiWei);
int baiWei = cardId/100%10;
System.out.println("百位数字:"+baiWei);
int qianWei = cardId/1000;
System.out.println("千位数字:"+qianWei);
//将各个位上数字求和
int sum = geWei+shiWei+baiWei+qianWei;
System.out.println("你的会员卡各个位上的数字之和:"+sum);
}
}
关系运算符(比较运算符)
(1)关系运算符用于比较两个变量或者常量的大小,运算结果是布尔值true或false。
(2)Java中共有6个关系运算符,分别是> ==;!=;>;<;>=;<=。
(3)>、<、>=、<=只支持数值类型的比较。
(4)==、!=支持所有数据类型的比较,包括数值类型、布尔类型、引用类型。
(5)>、<、>=、<=优先级别高于==、!=。
package cn.bdqn.demo05;
public class Demo01 {
public static void main(String[] args) {
/*
* 关系运算符(比较运算符):> >= < <= == !=
*
* =为赋值运算符,==为关系运算符里的等于运算符
* 关系运算符的结果为布尔值,要么为true要么为false
* >、<、>=、<= 运算符的优先级别高于==、!=
* >、<、>=、<=运算符只支持数值类型的数据比较
* 关系运算符经常使用在选择结构和循环结构中
*
*/
int num1 = 10;
int num2 = 20;
boolean result1 =num1>num2;
System.out.println("num1>num2:"+result1);//num1>num2:false
System.out.println(num1>=num2);
System.out.println(num1<num2);
System.out.println(num1<=num2);
System.out.println(num1==num2);
System.out.println(num1!=num2);
}
}
逻辑运算符
逻辑运算符:&(单与)、&&(双与/短路与)、|(单或/短路或)、||(双或/短路或)、!(非)
- 参与逻辑运算的表达式要是布尔值
- 逻辑运算符的运算结果为布尔值,要么为true,要么为false
- 与运算符和或运算符为双目运算符符,左右两边参与运算的表达式都需要是布尔值,非运算符是单目运算符,只需要右边有一个布尔类型的表达式即可
- 逻辑运算符经常使用在选择结构和循环结构中
&和&&的运算规律
- 只有当&和&&左右两边的表达式同时为true,&和&&的运算结果才为true。
- &&具有短路功能,当&&左边表达式结果为false的时候,直接判断整个&&运算结果为false,&&右边表达式不再进行计算
- &不具有短路功能,不管&左边表达式的结果为true还是false,&右边的表达式都会进行运算
boolean b1 = true;
boolean b2 = true;
boolean b3 = false;
boolean b4 = false;
//true&&true--->true
System.out.println(b1&&b2);//true
//true&&false--->false
System.out.println(b1&&b3);//false
//false&&true--->false
System.out.println(b3&&b2);//false
//false&&false--->false
System.out.println(b3&&b4);//false
System.out.println("---------------------");
System.out.println(b1&b2);//true
System.out.println(b1&b3);//false
System.out.println(b3&b2);//false
System.out.println(b3&b4);//false
|和||的运算规律
- 只要|和||左右两边的表达式中有一个为true,|和||的运算结果就为true
- ||具有短路功能,当||左边表达式结果为true的时候,直接判断整个||运算结果为true,||右边表达式不再进行计算
- |不具有短路功能,不管|左边表达式的结果为true还是false,|右边的表达式都会进行运算
boolean b1 = true;
boolean b2 = true;
boolean b3 = false;
boolean b4 = false;
//true||true--->true
System.out.println(b1||b2);//true
//true||false--->true
System.out.println(b1||b3);//true
//false||true--->true
System.out.println(b3||b2);//true
//false||false--->false
System.out.println(b3||b4);//false
System.out.println(b1|b2);//true
System.out.println(b1|b3);//true
System.out.println(b3|b2);//true
System.out.println(b3|b4);//false
!的运算规律
- 对true进行非运算,结果为false
- 对false进行非运算,结果为true
boolean b1 = true;
boolean b2 = true;
boolean b3 = false;
boolean b4 = false;
//!true--->false
System.out.println(!b1);
//!false--->true
System.out.println(!b3);
实际应用:
package cn.bdqn.demo06;
public class YunSuanFu {
public static void main(String[] args) {
int x = 8;
int y = 9;
System.out.println((++x == y) && (++x != y));
System.out.println(x);
}
}
运行结果:
解释:&&运算符如果左边是true,那么右边任需计算。只有当&&左边表达式结果为false的时候,直接判断整个&&运算结果为false,&&右边表达式才不再进行计算。
package cn.bdqn.demo05;
public class Demo04 {
public static void main(String[] args) {
int x = 8;
int y = 9;
//因为&&左边表达式(++x != y)的结果为false,可以直接判断整个&&运算的结果为false,所以&&右边的表达式不再进行计算
System.out.println((++x != y) && (++x == y));//false
System.out.println(x);//9
}
}
运行结果:
解释:因为&&左边表达式(++x != y)的结果为false,可以直接判断整个&&运算的结果为false,所以&&右边的表达式不再进行计算。
package cn.bdqn.demo05;
public class Demo05 {
public static void main(String[] args) {
int x = 8;
int y = 9;
//因为&左边表达式(++x != y)的结果为false,&不具备短路功能,所以&右表表达式还需要继续进行计算,得到x的值为10
System.out.println((++x != y) & (++x == y));//false
System.out.println(x);//10
}
}
运行结果:
解释:因为&左边表达式(++x != y)的结果为false,&不具备短路功能,所以&右表表达式还需要继续进行计算,得到x的值为10。
package cn.bdqn.demo05;
public class Demo07 {
public static void main(String[] args) {
int x = 8;
int y = 9;
//|没有短路功能,即使当|左边表达式(++x == y)为true,|右表表达式还需要继续进行运算
System.out.println((++x == y) | (++x != y));//true
System.out.println(x);//10
}
}
解释:|没有短路功能,即使当|左边表达式(++x == y)为true,|右表表达式还需要继续进行运算。
条件运算符
- 条件运算符是Java中唯一的需要3个操作数的运算符。
- 语法格式:
条件?表达式1:表达式2; - 运算规律:
首先对条件进行判断,如果其值为true,则返回表达式1的值;如果条件值为false,则返回表达式2的值。 - 条件运算符的嵌套:
条件?(条件?表达式1:表达式2):(条件?表达式1:表达式2);
package cn.bdqn.数值转换;
public class TiaoJianYunSuanFu {
public static void main(String[] args) {
int num1 = 30;
int num2 = 20;
int max = num1>num2?num1:num2;
System.out.println("最大值是:"+max);
}
}
运行结果:
用条件运算符判断奇偶性:
package cn.bdqn.数值转换;
public class TiaoJianYunSuanFu {
public static void main(String[] args) {
int num1 = 30;
int num2 = 20;
int max = num1>num2?num1:num2;
System.out.println("最大值是:"+max);
int number = 11;
String result = number%2 == 0?"偶数":"奇数";
System.out.println("number是一个"+result);
}
}
运行结果:
扩展:
条件运算符可以嵌套使用,条件运算符中的表达式还可以是条件运算符
语法结构:
条件?(条件?表达式1:表达式2):(条件?表达式3:表达式4)
int num1 = 10;
int num2 = 30;
int num3 = 20;
int max = num1>num2?(num1>num3?num1:num3):(num2>num3?num2:num3);
System.out.println(max);
运行结果:
运算符优先级
课后小练习
键盘输入四位数字的会员卡号,使用“/”和“%”运算符分解获得会员卡各个位上的数字,然后将各个位上数字求和。判断用户是否中奖,如果数字2之和大于20,则中奖。
写好后在对照答案!
package cn.bdqn.数值转换;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
/*
* 键盘输入四位数字的会员卡号
* 使用“/”和“%”运算符分解获得会员卡各个位上的数字
* 将各个位上数字求和
*/
//创建Scanner类对象并导包
Scanner sc = new Scanner(System.in);
//输入数据
System.out.println("请输入你的会员卡号(4位的整数):");
int cardId =sc.nextInt();
System.out.println("你输入的会员卡号是:"+cardId);
//使用“/”和“%”运算符分解获得会员卡各个位上的数字
int geWei = cardId%10;
System.out.println("个位数字:"+geWei);
int shiWei = cardId/10%10;
System.out.println("十位数字:"+shiWei);
int baiWei = cardId/100%10;
System.out.println("百位数字:"+baiWei);
int qianWei = cardId/1000;
System.out.println("千位数字:"+qianWei);
//将各个位上数字求和
int sum = geWei+shiWei+baiWei+qianWei;
System.out.println("你的会员卡各个位上的数字之和:"+sum);
String result = sum>20?"恭喜你,中奖了!":"很遗憾,你没有中奖。";
System.out.println(result);
}
}
运行结果:
那么你有没有做对呢?
总结
1. 赋值运算符:=
变量名 = 表达式;
算术运算符
2. 基本算术运算符
包含:+; -; ; / ; %(取模运算符/取余运算符) ;++(自增运算符); --(自减运算符 )。
++和 - - 修饰的变量参与运算时,如果++和- -在变量的前面,变量先进行++或者- -操作,操作完毕后,再进行运算
++和 - - 修饰的变量参与运算时,如果++和- -在变量的后面,变量先去进行运算,然后再进行++或者- -操作
3. 复合算术运算符
包含:+=;-=;=;/=;%=。
4. 关系运算符
(1)关系运算符用于比较两个变量或者常量的大小,运算结果是布尔值true或false。
(2)Java中共有6个关系运算符,分别是> ==;!=;>;<;>=;<=。
(3)>、<、>=、<=只支持数值类型的比较。
(4)==、!=支持所有数据类型的比较,包括数值类型、布尔类型、引用类型。
(5)>、<、>=、<=优先级别高于==、!=。
5. 逻辑运算符
包含:&(单与)、&&(双与/短路与)、|(单或/短路或)、||(双或/短路或)、!(非)
- 参与逻辑运算的表达式要是布尔值
- 逻辑运算符的运算结果为布尔值,要么为true,要么为false
- 与运算符和或运算符为双目运算符符,左右两边参与运算的表达式都需要是布尔值,非运算符是单目运算符,只需要右边有一个布尔类型的表达式即可
- 逻辑运算符经常使用在选择结构和循环结构中
只有当&和&&左右两边的表达式同时为true,&和&&的运算结果才为true。
&&具有短路功能,当&&左边表达式结果为false的时候,直接判断整个&&运算结果为false,&&右边表达式不再进行计算
&不具有短路功能,不管&左边表达式的结果为true还是false,&右边的表达式都会进行运算
只要|和||左右两边的表达式中有一个为true,|和||的运算结果就为true
||具有短路功能,当||左边表达式结果为true的时候,直接判断整个||运算结果为true,||右边表达式不再进行计算
|不具有短路功能,不管|左边表达式的结果为true还是false,|右边的表达式都会进行运算
对true进行非运算,结果为false
对false进行非运算,结果为true
5. 条件运算符
条件运算符是Java中唯一的需要3个操作数的运算符。
语法格式:
条件?表达式1:表达式2;
运算规律:
首先对条件进行判断,如果其值为true,则返回表达式1的值;如果条件值为false,则返回表达式2的值。
条件运算符的嵌套:
条件?(条件?表达式1:表达式2):(条件?表达式1:表达式2);