Day03
一、算数运算符
算数运算符的基本使用
- +、-、*、/、%、++、–
int num1 = 10; int num2 = 5; int result = num1 + num2; System.out.println(result);//15 System.out.println(num1 - num2);//5 System.out.println(10 * 5);//50 System.out.println(10 / 5);//2 System.out.println(10 % 3);//1
注意:
- byte类型做运算,会向上转型成int
- short类型做运算,会向上转型成int
- 浮点类型不能直接做运算,要做运算会使用BigDecimal
i++与i–的底层原理:
int i = 0; i = ++i; //底层原理: //i = (int)(i+1); //i = i; System.out.println(i);//1 int i = 0; i = i++; //底层原理: //int temp = i;--temp用于记录i最初的值 //i = (int)(i+1); //i = temp System.out.println(i);//0
扩展:
byte b = 10;
++b;//底层:b = (byte)(b+1);
short s = 10;
++s;//底层:s = (short)(s+1);
int i = 10;
++i;//底层:i = (int)(i+1);
long l = 10;
l++;//底层:l = (long)(l+1);
二、赋值运算符
=、+=、-=、 *=、/= 、 %=
赋值规则:
s + = 1 s = (T)((s) + (1) )
复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1)op(E2)),
其中T是E1的类型。
三、关系运算符
==、!=、>、>=、<=
System.out.println(10 == 10);//true
System.out.println(10 != 10);//false
System.out.println(10 > 10);//false
System.out.println(10 >= 10);//true
System.out.println(10 < 10);//false
System.out.println(10 <= 10);//true
总结:
- =是赋值号,==是判断两个值是否相等
- 关系运算符运算的结果都是boolean值
四、逻辑运算符
&、&&、|、||、^、!
&与 &&短路与
|或 ||短路或
^异或
!非
1.逻辑运算符的解释及比较
- &与:前后两者都是boolean值,同时成立(true),结果才为true
- &&短路与:前后两者都是boolean值,同时成立(true),结果才为true
- &:判断前者为false后,还会判断后者
&&:判断前者为false后,不会判断后者,所以效率更高- |或:前后两者都是boolean值,有一个成立(true),结果就为true
- ||短路或:前后两者都是boolean值,有一个成立(true),结果就为true
- |:判断前者为true,还会判断后者
||:判断前者为true,不会判断后者,所以效率更高- ^异或:前后两者都是boolean值,相同为false,不同为true
- !非 - 置反
2.逻辑运算符的案例
在dos窗口输入一个数字,判断是否在50~100的区间内 //1.输入一个int数字 Scanner scan = new Scanner(System.in); System.out.println("请输入一个int值:"); int num = scan.nextInt(); //2.判断是否在50~100的区间内 boolean bool = num>50 && num<100; //3.输出结果 System.out.println("该值是否在50~100的区间内:" + bool);
五、Scanner类的使用
含义:Java给我们提供的一个类,这个类的功能就是在控制台输入数据
//创建Scanner类的对象
//人类 李冬 = new 人类();
Scanner scan = new Scanner(System.in);
//调用功能
int i1 = scan.nextInt();//在控制台输入一个int数据
int i2 = scan.nextInt();//在控制台输入一个int数据
double d = scan.nextDouble();//在控制台输入一个double数据
String str = scan.next();//在控制台输入一个String数据
六、字符串拼接符 +
+两侧都是数值,此符号为算术运算符
+有一侧或者两侧是字符串,此符号为字符串拼接符
案例
System.out.println(1+2+"abc" + "def" +1+2);//3abcdeef12
// 3 +"abc" + "def" +1+2
// "3abc" + "def" +1+2
// "3abcdef" +1+2
// "3abcdef1" +2
// "3abcdef12"
七、表达式
5+6:算数表达式
5>6:关系表达式
true & false:逻辑表达式
八、三目运算符/三元运算符
1.语法:
数据类型 变量 = (表达式)?值1:值2;
2.理解:
表达式的结果必须是boolean类型
true - 将值1赋值给变量
false- 将值2赋值给变量
3.例子:
int num = (false)?10:20;
System.out.println(num);
4.案例:
在控制台输入两个int类型的数字,输出最大值
//创建Scanner类的对象scan
Scanner scan = new Scanner(System.in);
//输入两个数字
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
//判断大小
int max = (a>b)?a:b;//判断a是否大于b,如果大于就返回a,否则返回b
//输出最大值
System.out.println("最大值为:" + max);
在控制台输入三个int类型的数字,输出最大值
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
System.out.println("请输入第三个数字:");
int c = scan.nextInt();
int max = (a>b)?a:b;
max = (max>c)?max:c;
System.out.println("最大值为:" + max);
在控制台输入三个int类型的数字,由小到大输出
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
System.out.println("请输入第三个数字:");
int c = scan.nextInt();
//获取最大值
int max = (a>b)?a:b;
max = (max>c)?max:c;
//获取最小值
int min = (a<b)?a:b;
min = (min<c)?min:c;
//获取中间值
int mid = a+b+c-max-min;
System.out.println(min + "<" + mid + "<" + max);
5.深入三目运算符
扩展面试题1
int a = 5;
System.out.println((a<5)?10.9:9);//9.0
扩展面试题2
char x = 'x';//'x' - ASCII - 120
int i = 10;
System.out.println(false?i:x);//120
扩展面试题3
char x = 'x';//'x' - ASCII - 120
System.out.println(false?100:x);//x
System.out.println(false?65536:x);//120
6.三目运算符返回值规则:
- 值1和值2是常量的情况,就会按照取值范围大的类型返回数据
- 值1和值2是变量的情况,就会按照取值范围大的类型返回数据
- 值1是常量,值2是变量的情况,值1是否在值2所属类型的取值范围里
在,就按照值2类型返回数据
不在,就按照值1类型返回数据
九、位运算符
&与 |或 ^异或 << 左移 >> 右移 >>>无符号位右移
1.含义:
将十进制的数据转换为二进制再进行运算
2.解释:
- &:同位比较,两者为1,结果才为1
- |:同位比较,两者有1,结果就为1
- ^:同位比较,两者相同为0,不同为1
- &、|、^:前后两者都是数值,该符号为位运算符
&、|、^:前后两者都是boolean值,该符号为逻辑运算符- <<:整体向左移动n位,就用n个0补位
- ‘>>’:整体向右移动n位,就用n个最高位补位
- ‘>>>’:整体向右移动n位,就用n个0补位
注意:>> 和 >>> 如果是操作整数,效果是一样的
3.经典面试题
经典面试题1:使用最有效率的方式计算2*8
System.out.println(2<<3);
经典面试题2:描述下列代码的输出结果
//-1 int:1111,1111,1111,1111,1111,1111,1111,1111
//(byte):1111,1111
//(char):1111,1111,1111,1111 -- char类型向上转型用0补位
//(int) :0000,0000,0000,0000,1111,1111,1111,1111
System.out.println((int)(char)(byte)-1);//65535
十、转义字符
含义:
具有特殊意义的字符本身
\n:表示换行
":表示一个双引号
':表示一个单引号
\\:表示一个斜杠
\t:表示水平制表
十一、常量
1.含义:
在程序执行过程中不可变的量
2.分类:
- 数字字面量(ps:69、100、200)
- 字面值常量(ps:“abcd”,“老师好”)
- final(最终的)修饰的变量
字面值常量和final(最终的)修饰的变量:存储在常量池中,直到项目结束才会被销毁