一、算术运算符的使用
public class Test04{
/**
知识点:算数运算符的使用
符号:+、-、*、/、%、++、--
int a = 10;
int b = 3;
int result = a + b;
System.out.println(result);//13
System.out.println(a + b);//13
System.out.println(10 + 3);//13
System.out.println(10 - 3);//7
System.out.println(10 * 3);//30
System.out.println(10 / 3);//3
System.out.println(10 % 3);//1
//++:自增1
//++a:先自增1,再使用
int a = 10;
System.out.println(++a);//11
System.out.println(a);//11
//b++:先使用,再自增1
int b = 10;
System.out.println(b++);//10
System.out.println(b);//11
//--:自减1
//--c:先自减1,再使用
int c = 10;
System.out.println(--c);//9
System.out.println(c);//9
//d--:先使用,再自减1
int d = 10;
System.out.println(d--);//10
System.out.println(d);//9
*/
public static void main(String[] args){
}
}
二、算术运算符的深入
public class Test06{
/**
知识点:算数运算符的深入 -- 面试题
符号:+、-、*、/、%、++、--
经典面试题一:输出结果为?
int a = 8;
int b = (a++)+(++a)+(a*10);
//a = 10
//b = 8 + 10 + 100
System.out.println(b);//118
经典面试题二:输出结果为?
int i = 0;
//底层原理:
//i = (int)(i+1);
//i = i;
i = ++i;
System.out.println(i);//1
经典面试题三:输出结果为?
int i = 0;
//底层原理:
//int temp = i; -- temp作为临时变量,记录了i最初始的值 - 0
//i = (int)(i+1); -- 变量i确实自增了
//i = temp; -- 将temp赋值给i,i又变回了原来的值
i = i++;
System.out.println(i);//0
*/
public static void main(String[] args){
}
}
三、赋值运算符
public class Test07{
/**
知识点:赋值运算符
符号:=、+=、-=、*=、/=、%=
int num = 10;
num += 5;//num = (int)(num+5);
num -= 5;//num = (int)(num-5);
num *= 5;//num = (int)(num*5);
num /= 5;//num = (int)(num/5);
num %= 3;//num = (int)(num%3);
System.out.println(num);//1
经典面试题一:输出结果为?
int a,b; //一次性声明多个变量
a = b = 100;//1.将100赋值给b 2.将b中数据赋值给a
System.out.println(a); //100
System.out.println(b); //100
经典面试题二:下面的两种写法结果分别是?
short s = 1;
s = s+1;//会报错,因为short类型的数据和int类型的数据做运算,会向上转型成int
short s=1;
s += 1;//不会报错
赋值规则:
s += 1 s = (short)((s) + (1))
复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型。
*/
public static void main(String[] args){
}
}
四、关系运算符
public class Test08{
/**
知识点:关系运算符
符号:==、!=、>、>=、<、<=
小结:
关系运算符的结果都是boolean值
=为赋值号,将赋值号右边的数据赋值给左边的变量,他是赋值运算符
==表示判断两个值是否相同,他是关系运算符
!=表示判断两个值是否不相同,感叹号是英文
boolean bool = 10 == 5;
System.out.println(bool);//false
System.out.println(10 != 5);//true
System.out.println(10 > 5);//true
System.out.println(10 >= 5);//true
System.out.println(10 < 5);//false
System.out.println(10 <= 5);//false
//经典面试题一:输出结果为?
int x = 10;
int y = 10;
boolean flag = (x == y);
System.out.println(flag);//true
flag = (x = y);//会报错,因为boolean类型不能与其他类型兼容
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
*/
public static void main(String[] args){
}
}
五、字符串拼接符
符号:+
注意:
a.+两侧都是数值,此符号为算术运算符
b.+一侧或两侧有字符串,此符号为字符串拼接符
public class MyTest01{ public static void main(String[] args){ System.out.println(1 + 2 + "def" + "abc" + 1 + 2); // 3 + "def" "abc" +1 +2 // "3def"+ "abc" + 1 + 2 // "3defabc" + 1 + 2 // "3defabc12" } }
六、逻辑运算符
- 符号:
符号 & && | || ^ ! 含义 与 短路与 或 短路或 异或 非
- 符号深入
2.1 &与:前后两侧必须接boolean,两侧都成立(true),结果才为trueSystem.out.println(true &true);//true System.out.println(true & false);//false System.out.println(false & true);//false System.out.println(false & false);//false
2.2 &&短路与:前后两侧必须都接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
2.3 & VS &&
&:判断前者为false后,还会判断后者
&&:判断前者为false后,不会判断后者,效率更高System.out.println(false &10/0>3);//ArithmeticException-算数异常 System.out.println(false && 10/0>3);//false
2.4|或:前后两侧都必须接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
2.5 ^异或:前后两侧必须都接boolean,两侧不同为true,两侧相同为false
System.out.println(true ^ true);//false System.out.println(true ^ false);//true System.out.println(false ^ true);//true System.out.println(false ^ false);//false
2.6 !非:取反/置反
boolean bool1 = true; System.out.println(!bool1);//false boolean bool2 = false; System.out.println(!bool2);//true
- 注意:
&、&&、|、||、^前后两侧都是接boolean
!非,不要用中文输入法输入感叹号
- 练习题:在dos窗口输入一个数字,判断是否在50~100的区间内
import java.util.Scanner; public class MyTest07{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("请输入一个数字"); int a = scan.nextInt(); boolean result = a>50 &&a<100; System.out.println("该数字是否在50~100以内"+result); } }
七、三目运算符的使用和深入
语法规则:变量 = (表达式)?值1:值2;
理解:表达式的结果必须是Boolean类型
true - 将值1赋值给变量
false - 将值2赋值给变量
eg:
int num = (false)? 10:20;
System.out.println(num);//20
应用
2.1 需求1:在控制台输入两个int值,输出最大值
import java.util.Scanner; public class MyTest05{ public static void main(String[] args){ 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; System.out.println("最大值为"+max); } }
2.2 需求2:在控制台输入三个int值,输出最大值
import java.util.Scanner; public class MyTest05{ public static void main(String[] args){ 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); } }
2.3 需求3:在控制台输入三个int值,由小到大输出(xx<xx<xx)
import java.util.Scanner; public class MyTest05{ public static void main(String[] args){ 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-min-max; System.out.println(min+"<"+mid+"<"+max); } }
3 面试题
3.1扩展面试题1
System.out.println((false)?10.9:9);//9.0
3.2扩展面试题2
char x = ‘x’;//‘x’-字符编码-120
int i = 100;
System.out.println((false)?i:x);//120
3.3扩展面试题3:
char x = ‘x’;
System.out.println((false)?100:x);//x
System.out.println((false)?100000:x);//120
返回值规则:
值1和值2都是常量的情况,按照取值范围大的类型返回数据
值1和值2都是变量的情况,按照取值范围大的类型返回数据
值1和值2一个是变量一个是常量的情况,判断常量是否在变量所属类型的取值范围内
在–按照变量类型返回数据
不在–按照常量类型返回数据
八、位运算符
符号:&、|、^、<<、>>、>>>
理解:将十进制的数据转换为二进制再做运算
位运算符深入
3.1 &与:同位比较,两者为1,结果才为1
eg1:
public class MyTest04{ public static void main(String[] args){ byte b1 = 19;//0001 0011 byte b2 = 25;//0001 1001 //0001 0001 System.out.println(b1 & b2);//17 } }
eg2:byte类型的数据在做运算时会向上转型为int类型的数值,所以必须强制转换
public class MyTest04{ public static void main(String[] args){ byte b1 = 19;//0001 0011 byte b2 = 25;//0001 1001 byte result = b1 & b2; System.out.println(result); } }//报错
public class MyTest04{ public static void main(String[] args){ byte b1 = 19;//0001,0011 byte b2 = 25;//0001,1001 //0001,0001 //b1 - byte:0001,0011 // int:0000,0000,0000,0000,0000,0000,0001,0011 //b2 - byte:0001,1001 // int:0000,0000,0000,0000,0000,0000,0001,1001 // 结果: 0000,0000,0000,0000,0000,0000,0001,0001 // byte:0001,0001 byte result = (byte)(b1 & b2); System.out.println(result);//17 } }
3.2 |或:同位比较,两者有1,结果就为1
public class MyTest04{ public static void main(String[] args){ int a = 19;//0000,0000,0000,0000,0000,0000,0001,0011 int b = 25;//0000,0000,0000,0000,0000,0000,0001,1001 //0000,0000,0000,0000,0000,0000,0001,1011 System.out.println(a|b);//27 } }
3.3 ^异或:同位比较,两者相同为0,不同为1
public class MyTest04{ public static void main(String[] args){ int a = 19;//0000,0000,0000,0000,0000,0000,0001,0011 int b = 25;//0000,0000,0000,0000,0000,0000,0001,1001 //0000,0000,0000,0000,0000,0000,0000,1010 System.out.println(a ^ b);//10 } }
3.4 <<左移:整体向左移动n位,就用n个0补到最低位
注意:左移1位相当于乘以2
public class MyTest04{ public static void main(String[] args){ int c = 128;//0000,0000,0000,0000,0000,0000,1000,0000 System.out.println(c<<2);//512 //0000,0000,0000,0000,0000,0010,0000,0000 } }
3.5 >>右移:整体向右移动n位,就用n个符号位补到最高位,正数高位步0,负数高位补1
注意:右移1位相当于除以2
public class MyTest04{ public static void main(String[] args){ int a = 128;//0000,0000,0000,0000,0000,0000,1000,0000 //0000,0000,0000,0000,0000,0000,0010,0000 System.out.println(a >> 2);//32 int b = -128;//补码:1111,1111,1111,1111,1111,1111,1000,0000 //补码:1111,1111,1111,1111,1111,1111,1110,0000 System.out.println(b >> 2);//-32 } }
3.6 >>>无符号位右移
注意:无符号位右移和右移在处理正数的情况下没有区别,都是高位补0public class MyTest04{ public static void main(String[] args){ int c = 128;//0000,0000,0000,0000,0000,0000,1000,0000 0000,0000,0000,0000,0000,0000,0010,0000 System.out.println(c >>> 2);//32 int d = -128;//1111,1111,1111,1111,1111,1111,1000,0000 //0011,1111,1111,1111,1111,1111,1110,0000 System.out.println(d >>> 2);//1073741792 } }
九、表达式
5+6 ->算数表达式
5>6 ->关系表达式