Day03
一、运算符的理解与深入使用
1. 算数运算符
+、-、、/、%、++、–*
扩展:
经典面试题一:输出结果为?//b=118
int a = 8;
int b = (a++)+(++a)+(a*10);
System.out.println(b);
解析:
- 首先,将变量a初始化为8。
- 然后,计算表达式(b = (a++)+(++a)+(a*10))的值。
- 在表达式中,首先执行a++,此时a的值为8,但是由于是后置递增运算符,所以表达式的值为8,然后a的值变为9。
- 接着,执行++a,此时a的值为10。
- 最后,计算a=10时,即10*10=100。
- 将上述三个部分的值相加,即8+10+100=118,将结果赋给变量b。
经典面试题二:输出结果为?// 1
int i = 0 ;
i = ++i;
System.out.println(i);
解析:
底层实现:i = (int)(i+1); i=i;
**
int i = 0;
i = i++;
System.out.println(i);
底层实现:int temp = i; i = (int)(i+1); i = temp;
2. 赋值运算符
*=、+=、-=、 =、/= 、 %=
扩展:
经典面试题一:输出结果为?// a = 100, b = 100
int a,b;
a = b = 100;
System.out.println(a);
System.out.println(b);
**
经典面试题二:下面的两种写法结果分别是?
short s1=1;
s1 = s1+1;
**
short s2=1;
s2 += 1;
解析:
int类型的s1不能自动转化为short类型, 无法将int类型的值直接赋给short类型的变量s1,因此会编译错误,需要进行强转才能计算。 对于第二个表达式s2 += 1;
,这是一个复合赋值运算符,相当于s2 = (short)(s2 + 1);
。在这里,右侧的表达式s2 + 1
仍然会进行自动类型提升,计算结果为2,然后将结果强制转换为short类型,并赋给变量s2。由于强制转换可以保证结果在short类型的范围内,所以不会出现编译错误。
赋值规则:
复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型。
3. 关系运算符
==、!=、>、 <、 >=、 <=
注意:
\1. 关系运算符的结果都是boolean类型,true或者 false
\2. 不要将==用成=
扩展:
经典面试题一:输出结果为?
int x = 10;
int y = 10;
boolean flag= (x == y);
System.out.println(flag);
flag = (x = y);
System.out.println(flag);
解析:
第一个flag的结果为true,将x与y的值进行比较。第二个flag为boolean类型,而x=y为赋值运算——结果仍为int类型,无法自动转化为boolean类型赋给flag,编译错误。
经典面试题二:输出结果为?
boolean b1 = true;
boolean b2 = false;
boolean b3 = (b1 == b2);
System.out.println(b3);
boolean b4 = (b1 = b2);
System.out.println(b4);
解析:
解析:
- 首先,将变量b1初始化为true,将变量b2初始化为false。
- 执行表达式(b3 = (b1 == b2)),比较b1和b2的值是否相等。由于b1为true,b2为false,所以比较结果为false,将结果赋给变量b3。
- 使用System.out.println()方法打印变量b3的值,输出结果为false。
- 接着,执行表达式(b4 = (b1 = b2)),将b2的值赋给b1,并将赋值操作的结果(即b2的值)赋给变量b4。因此,变量b1的值变为false,变量b4的值也为false。
- 再次使用System.out.println()方法打印变量b4的值,输出结果仍为false。
4. 逻辑运算符
&(与)、&&(短路与)、|(或) 、||(短路或)、!(非)、^(异或)
规则:
& 和 && 规则:两个有一侧为false,结果为false
| 和 || 规则 :两侧有一侧为true,结果为true
^ 规则:两侧相同为false,不同为true
!规则:置反,false变成true , true变成false
比较:做实验证明谁的效率高
& vs && 和 | vs ||
注意:
\1. 逻辑运算符运行结果都是boolean类型
\2. &、&&、|、||、^ 两侧都是boolean类型数据
二、Scanner类
1、简介:Java提供的类,主要用于在dos窗口输入数据
2、使用步骤:
\1. 导包:import java.util.Scanner;
\2. 创建对象:Scanner scan = new Scanner(System.in);
\3. 调用方法(功能):int num = scan.nextInt();
3、细节:
\1. 使用Java提供的类需要在java文件中的第一行导入包
\2. 使用功能必须要先创建对象
\3. 创建对象 类型 引用 = 新建的对象
Scanner scan = new Scanner(System.in);
\4. 方法介绍:调用方法必须使用对象所对应的引用进行调用
int num = scan.nextInt();
在窗口输入一个整数类型数字并赋值给程序中的num变量
double num = scan.nextDouble();
在窗口输入一个浮点类型数字并赋值给程序中的num变量
String str = scan.next();
在窗口输入一个字符串并赋值给程序中的str变量
\5.方法调用几次,就可以在窗口输入几次