Java运算符
1.算术运算符
知识点:算术运算符的使用
符号:+、-、、/、%、++、–(加,减,乘,除,取余,自增,自减)
(+、-、、/)就是数学运算中的加减乘除,(/、%、++、–)的使用与常规数学符号的使用方法有所区别.
###1.1算术运算符的深入
特殊点1:byte类型做运算会先向上转型成int类型
//注意:
1.自动转型使用最高位补位
2.强制转型从最高位开始舍弃
特殊点2:short类型做运算会先向上转型成int类型
特殊点3:byte和short类型做运算会先向上转型成int,其余数值型按照取值范围大的类型返回数据
特殊点4:++a; 和 b++;没有区别,因为分号是执行语句的结束,不管先加还是后加都给我加
特殊点5:
int num = 10;
//底层实现:num = (int)(num+1);
++num;
System.out.println(num);
特殊点6:char类型可以做运算
char c = ‘a’;//'a’的码值是97
int i = c+1;
System.out.println(i);//98
2.赋值运算符
符号:=、+=、-=、*=、/=、%=
注意:=为赋值运算符,将右边的值赋值给左边的变量
经典面试题一:输出结果为?
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; //short和int做运算会向上转型成int,如果没有强转就会报错
short s=1;
s += 1;
赋值规则:
s += 1 s = (short)((s) + (1))
复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型。
3.字符串拼接符
符号:+
注意:
+两侧都是数值,该符号为算数运算符
+两侧有一侧或两侧是字符串,该符号为字符串拼接符
## 3 Scanner类的理解与使用
3.1 Scanner理解
Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型的数据进行分析。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器。
3.2 Scanner常用方法
next(),nextDouble(),nextInt(),nextLine(),nextFloat(),nextLong()等等.
逻辑运算符
知识点:逻辑运算符
符号:
&与 &&短路与
|或 ||短路或
^异或
!非
注意:
1.逻辑运算符运行结果都是boolean类型
2.&、&&、|、||、^ 两侧都是boolean类型数据
//&与:前后两侧都是boolean值,两侧都为true,结果才为true
System.out.println(true & true);//true
System.out.println(false & true);//false
System.out.println(true & false);//false
System.out.println(false & false);//false
//&&短路与:前后两侧都是boolean值,两侧都为true,结果才为true
System.out.println(true && true);//true
System.out.println(false && true);//false
System.out.println(true && false);//false
System.out.println(false && false);//false
//& vs &&
//&与:判断前者为false后,还会判断后者
//&&短路与:判断前者为false后,不会判断后者,直接返回false,所以效率更高
//ArithmeticException - 算数异常
System.out.println(false && 10/0>3);
//|或:前后两侧都是boolean值,两侧有为true,结果就为true
System.out.println(true | true);//true
System.out.println(false | true);//true
System.out.println(true | false);//true
System.out.println(false | false);//false
//||短路或:前后两侧都是boolean值,两侧有为true,结果就为true
System.out.println(true || true);//true
System.out.println(false || true);//true
System.out.println(true || false);//true
System.out.println(false || false);//false
//| vs ||
//|或:判断前者为true后,还会判断后者
//||短路或:判断前者为true后,不会判断后者,直接返回true,所以效率更高
System.out.println(true || 10/0>3);
//^异或:前后两侧都是boolean值,两侧相同为false,不同为true
System.out.println(true ^ true);//false
System.out.println(false ^ true);//true
System.out.println(true ^ false);//true
System.out.println(false ^ false);//false
//!非:置反
boolean bool1 = true;
System.out.println(!bool1);//false
boolean bool2 = false;
System.out.println(!bool2);//true
三目运算符
扩展面试题1:
System.out.println((false)?10.9:9);//9.0
扩展面试题2:
char x = 'x';//码值 - 120
int i = 10;
System.out.println(false?i:x);//120
扩展面试题3:
char x = 'x';//码值 - 120
System.out.println(false?100:x);//x
System.out.println(false?100000:x);//120
扩展 - 常量:在程序执行过程中,不可发生改变的量
注意:数字字面量就是常量的一种
三目运算符返回值规则:
1.值1和值2都是常量的情况,按照取值范围大的类型返回数据
2.值1和值2都是变量的情况,按照取值范围大的类型返回数据
3.值1和值2一个是常量一个是变量的情况,判断常量是否在变量所属类型的取值范围里
在 - 按照变量类型返回数据
不在-按照常量类型返回数据
6 移位运算符
知识点:位运算符
理解:将十进制的数据转换为二进制做运算符
符号:
&与 |或 ^异或
<< 左移
>> 右移\>\>\> 无符号位右移 //&与:同位比较,两者为1,结果才为1 byte b1 = 19;//0001,0011 byte b2 = 21;//0001,0101 //0001,0001 //|或:同位比较,两者有1,结果就为1 //^异或:同位比较,两者不同为1,相同为0 注意: &、|、^前后两侧是数值,该符号为位运算符 &、|、^前后两侧是布尔值,该符号为逻辑运算符 //<<左移:整体向左移动n位,就用n个0补位(补到最低位) //注意:左移一位相等于乘2 //>>右移:整体向右移动n位,就用n个最高位/符号位补位(补到最高位) //注意:右移一位相等于除2 //>>>无符号位右移:整体向右移动n位,就用n个0补位(补到最高位) //注意:>>和>>>在处理正数的情况下没有区别 面试题:描述下列代码运行结果 考点:char类型的取值范围没有负数,向上转型是用0补位 //-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 System.out.println((int)(char)(byte)-1);//65535
7 运算符的优先级别
不用记忆,灵活运用小括号即可.