int num1 = 10;
int num2 = 5;
int result = num1 + num2;
System.out.println(result);//15
System.out.println(10-5);//5
System.out.println(10*5);//50
System.out.println(10/5);//2
System.out.println(10%3);//1
++:自增1
int a = 10;
//++a:先自增1,再使用
System.out.println(++a);//11
System.out.println(a);//11
int a = 10;
//a++:先使用,再自增1
System.out.println(a++);//10
System.out.println(a);//11
--:自减1
int a = 10;
//--a:先自减1,再使用
System.out.println(--a);//9
System.out.println(a);//9
int a = 10;
//a--:先使用,再自减1
System.out.println(a--);//10
System.out.println(a);//9
案例1:
byte b1 = 10;
byte b2 = 5;
//byte b3 = b1 + b2; 运行报错
byte b3 = (byte)(b1 + b2);
System.out.println(b3);
案例2:
short s1 = 10;
short s2 = 5;
//short s3 = s1 + s2; 运行报错
short s3 = (short)(s1 + s2);
System.out.println(s3);
案例3:
int i = 10;
double d = 1.2;
double result = i + d;
System.out.println(result);//11.2
案例4:
int a = 10;
//++a;
a++;
System.out.println(a);//11
注意:
1.两个byte类型做运算,会向上转型成int类型
2.两个short类型做运算,会向上转型成int类型
3.除了byte和short类型,其他的数值型都是向上转型后再做运算
4.分号代表一条执行语句的结束,不管是++a还是a++,都自增了
经典面试题一:输出结果为?
int a = 8;
int b = (a++)+(++a)+(a*10);
// 8 10 100
System.out.println(b); //118
经典面试题二:输出结果为?
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=0
//i = (int)(i +1); --> i=1
//i = temp;
System.out.println(i);//0
扩展:
byte b = 10;
//++的公式:b = (byte)(b + 1);
++b;
System.out.println(b);//11
int i = 10;
i += 5;//i = (int)(i+5);
i -= 5;//i = (int)(i-5);
i *= 5;//i = (int)(i*5);
i /= 5;//i = (int)(i/5);
i %= 3;//i = (int)(i%3);
System.out.println(i);//1
经典面试题一:输出结果为?
int a,b; //一次性声明多个变量
a = b = 100;//先把100赋值给b,再把b赋值给a
System.out.println(a); //100
System.out.println(b); //100
经典面试题二:下面的两种写法结果分别是?
short s=1;
s = s+1; //报错,s-short 1-int,运算结果的类型为int
short s=1;
s += 1;// s = (short)(s+1);
赋值规则:
s+ = 1
s = (T)((s) +(1))
复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型,op为符号。
boolean bool = 10 == 20;
System.out.println(bool);//false
System.out.println(10 != 20);//true
System.out.println(10 > 20);//false
System.out.println(10 >= 20);//false
System.out.println(10 < 20);//true
System.out.println(10 <= 20);//true
注意:
1.== 判断两个值是否相等
2.!= 判断两个值是否不相等
3.关系运算符的结果一定为boolean类型
经典面试题一:输出结果为?
int x = 10;
int y = 10;
boolean flag = (x == y);
System.out.println(flag);//true
flag = (x = y);//不兼容,布尔类型不能和其他基本数据类型兼容
System.out.println(flag);
经典面试题二:输出结果为?
boolean b1 = true;
boolean b2 = false;
boolean b3 = (b1 == b2);
System.out.println(b3);//false
boolean b4 = (b1 = b2);
System.out.println(b4);//false
//& 与:前后两者都是boolean,都为true,结果则为true
System.out.println(true & true);//true
System.out.println(true & false);//false
System.out.println(false & true);//false
System.out.println(false & false);//false
//&& 短路与:前后两者都是boolean,都为true,结果则为true
System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false
System.out.println(false && false);//false
//&:前者为false后,还会判断后者
//&&:前者为false后,不会判断后者,所以效率更高
//ArithmeticException -- 算数异常
System.out.println(false && (10/0)>0);
//| 或:前后两者都是boolean,其中一个为true,结果则为true
System.out.println(true | true);//true
System.out.println(true | false);//true
System.out.println(false | true);//true
System.out.println(false | false);//false
//|| 或:前后两者都是boolean,其中一个为true,结果则为true
System.out.println(true || true);//true
System.out.println(true || false);//true
System.out.println(false || true);//true
System.out.println(false || false);//false
//|:前者为true,还会判断后者
//||:前者为true,不会判断后者,所以效率更高
System.out.println(true || (10/0)>0);
//^ 异或:相同为false 不同为true
System.out.println(true ^ true);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true
System.out.println(false ^ false);//false
//! 非 --> 置反
boolean bool1 = true;
System.out.println(!bool1);//false
boolean bool2 = false;
System.out.println(!bool2);//true
练习题:在dos窗口输入一个数字,判断是否在50~100的区间内:
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scan.nextInt();
System.out.println(num > 50 && num < 100);
语法:数据类型 变量 = (表达式)?值1:值2;
理解:表达式的结果一定是boolean类型
true - 把值1赋值给变量
false - 把值2赋值给变量
实验:
int num = (false)?10:20;
System.out.println(num); //20
案例1:在控制台输入两个int类型的数字,输出最大值
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
int result = (a>b)?a:b;
System.out.println(result);
案例2:在控制台输入三个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);
扩展面试题1:
int a = 5;
System.out.println((a<5)?10.9:9);//9.0
A. 编译错误
B. 10.9
C. 9
D. 以上答案都不对
扩展面试题2:
char x='x';
int i=10;
System.out.println(false?i:x);//120
System.out.println(false?i:x);//x
System.out.println(false?65536:x);//120
A. 120 x
B. 120 120
C. x 120
D. 以上答案都不对
三目运算符返回值规则:
1.值1和值2都是数字字面量,按照取值范围大的类型返回
2.值1和值2都是变量,按照取值范围大的类型返回
3.值1是数字字面量,值2是变量,判断值1是否在值2所属类型的取值范围里
在:就按照值2类型返回
不在:就按照值1类型返回
加号两侧都是数值,此符号为算数运算符
加号两侧有一次或两侧是字符串,此符号为字符串拼接符
案例:
System.out.println(1+2+"abc"+1+2 + "xxx");
// 3 +"abc"+1+2 + "xxx"
// "3abc" +1+2 + "xxx"
// "3abc1" +2 + "xxx"
// "3abc12" + "xxx"
// "3abc12xxx"
& 、| 、^ :前后两侧都为布尔值,此符号为逻辑运算符
& 、|、 ^ :前后两侧都为数值,此符号为位运算符
//&:同位比较,两者为1,结果则为1
byte b1 = 27;//0001,1011
byte b2 = 34;//0010,0010
//0011,1001
/*
byte 27 - 向上转型为int 0000,0000,0000,0000,0000,0000,0001,1011
byte 34 - 向上转型为int 0000,0000,0000,0000,0000,0000,0010,0010
相&后
0000,0000,0000,0000,0000,0000,0000,0010
强转后
0000,0010
*/
byte result = (byte)(b1 & b2);
System.out.println(result);//2 - 0000,0010
//|:同位比较,两者有1,结果则为1
System.out.println(b1 | b2);//59 - 0011,1011
//^:同位比较,两者相同为0,不同为1
System.out.println(b1 ^ b2);//57 - 0011,1001
//<< 左移:向左整体移动n位,就用n个0补位
byte b = 10;//0000,1010
System.out.println(b << 2);//0010,1000
//>> 右移:向右整体移动n位,就用n个最高位补位
byte b1 = 10;//0000,1010
System.out.println(b1 >> 2);//0000,0010
byte b2 = -10;//1111,0110
System.out.println(b2 >> 2);//1111,1101
//>>> 无符号位右移:向右整体移动n位,就用n个0补位
byte b2 = -10;//1111,0110
//0011,1111,1111,1111,1111,1111,1111,1101
System.out.println(b2 >>> 2);//1073741821
面试题1:用最有效率的方式计算2*8
//0000,0100
System.out.println(2 << 3);
面试题2:猜猜下面代码的运行结果
System.out.println((int)(char)(byte)-1);
/*
-1 int:1111,1111,1111,1111,1111,1111,1111,1111
byte:1111,1111
char:1111,1111,1111,1111
int:0000,0000,0000,0000,1111,1111,1111,1111
注意:char没有负数,所以向上用0补位
*/
5+6:算数表达式
5>6:关系表达式
5|6:位运算表达式
经验:不用记,灵活运用小括号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S4fjjK4E-1592395785332)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200617185723640.png)]
转义字符:特殊意义的字符本身
" 代表一个双引号
’ 代表一个单引号
\ 代表有一个斜杠
\n 代表换行
\t 代表水平制表
注意:println() 打印+换行
print() 打印
实验:
System.out.println(""HelloWorld"");
System.out.println("'HelloWorld'");
System.out.println("\HelloWorld\");
System.out.print("HelloWorld\n");
System.out.print("HelloWorld");
System.out.println("桃谷绘里香\t泷泽萝拉\t三上悠亚");
System.out.println("北条麻衣\t水野朝阳\t爱田奈奈");
常量:程序中,不可变的量
1.数字字面量:程序中出现的数字
2.字面值常量:用双引号括起来的内容
3.用final修饰变量,变量变成常量 (final int i = 10;)
扩展:字面常量 和 final修饰的变量的生命周期:
位置:常量池
Java执行语句:
1.顺序语句:方法中的代码从上往下执行
2.分支语句:依据不同的条件,执行不同的功能
2.1 if
2.2 switch
3.循环语句:依据不同的条件,重复执行某个功能
3.1 for
3.2 while
3.3 do-while
4.特殊的流程控制语句
4.1 break
4.2 continue
4.3 return
4.4 lable简单if分支语法:
if(表达式){
…代码块…
}
理解:表达式的值只能是boolean类型
true - 执行代码块 false- 跳出if分支,执行if以外的代码
案例:如果麻生希的Java考试成绩大于98分,麻生希就能获得一辆法拉利作为奖励
Scanner scan = new Scanner(System.in);
System.out.println("请输入麻生希的Java成绩:");
double javaScore = scan.nextDouble();
if(javaScore > 98){
System.out.println("奖励麻生希一辆法拉利");