1 运算符
1.1 比较运算符
- 比较运算符的结果都是boolean类型,也即是要么是true,要么是false。
- 比较运算符"=="不能写成"="。
- >
package java003; /** * 2017/8/31. * 说明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a>b);//false } }
- <
package java003; /** * 2017/8/31. * 说明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a<b);//true } }
- ==
package java003; /** * 2017/8/31. * 说明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a==b);//false } }
- !=
package java003; /** * 2017/8/31. * 说明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a!=b);//true } }
- >=
package java003; /** * 2017/8/31. * 说明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a>=b);//false } }
- <=
package java003; /** * 2017/8/31. * 说明: */ public class OperateDemo { public static void main(String[] args) { int a = 3; int b = 7; System.out.print(a<=b);//true } }
- instanceof
package java003; /** * 2017/8/31. * 说明: */ public class OperateDemo { public static void main(String[] args) { String str = "hello"; System.out.print(str instanceof String);//true } }
1.2 逻辑运算符
- &(与)、|(或)、!(非)、&&(短路与)、||(短路或)、^(异或)
- 逻辑运算符用于连接两个boolean类型的表达式。
- 示例
package java003; /** * 2017/8/31. * 说明:逻辑运算符 */ public class OperateDemo2 { public static void main(String[] args) { int x = 3; System.out.print(x >= 2 && x <= 5); } }
- &的特点:
- 如下图所示:表达式1&表达式2的结果。
表达式1 | 表达式2 | 结果 |
true | false | false |
true | true | true |
false | false | false |
false | true | false |
- &运算的规律:一假全假,全真为真。
- |的特点
- 如下图所示:表达式1|表达式2的结果。
表达式1 | 表达式2 | 结果 |
true | true | true |
true | false | true |
false | true | true |
false | false | false |
- |运算的规律:一真全真,全假才假。
- 示例:
package java003; /** * 2017/8/31. * 说明:逻辑运算符 */ public class OperateDemo2 { public static void main(String[] args) { int x = 5; System.out.print(x > 5 || x <6); } }
- !的特点
- 如下图所示:!表达式
表达式 | 结果 |
true | false |
false | true |
- 非运算的规律:非假则真,非真则假。
- 示例:
package java003; /** * 2017/8/31. * 说明:逻辑运算符 */ public class OperateDemo2 { public static void main(String[] args) { int x = 5; System.out.print(x == 5); System.out.print(!(x==5)); } }
- ^
- 如下图所示:表达式1^表达式2
表达式1 | 表达式2 | 结果 |
true | true | false |
false | true | true |
true | false | true |
true | true | true |
- 我们知道,在计算机中一般0表示false,1表示true,当然,需要声明的是java中不是用0表示false,1表示true的,在java中,两者不等价。
- 异或的规律:相同为0,不同为1。即异或左右两边的表达式,如果相同,就是false,不同,就是true。
package java003; /** * 2017/8/31. * 说明:逻辑运算符 */ public class OperateDemo2 { public static void main(String[] args) { System.out.print(true^true);//false System.out.print(true^false);//true System.out.print(false^true);//true System.out.print(false^false);//false } }
1.3 位运算符
- <<(左移)、>>(右移)、>>>(无符号右移)、&(与)、|(或)、^(异或)、~(反码)
- 示例:6&3,int类型的数据在内存中是32位,此处为了方便,就没有画32位了。
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 6 ; int b = 3; System.out.print( a & b);//2 } }
- 示例:6 | 3
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 6 ; int b = 3; System.out.print( a | b);//7 } }
- 示例:6^3
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 6 ; int b = 3; System.out.print( a ^ b);//5 } }
- 示例:~3
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int b = 3; System.out.print( ~ b);//-4 } }
- 示例:3<<2 ,左移一位,乘以2。
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int b = 3; System.out.print( 3 << 2);//12 } }
- 示例:3 >>2 ,右移一位除以2,如果首个数字是0,则右移的时候,左边空位补0,;如果首个数字是1,则右移的时候,左边空位补1。因为在计算机中0表示正数,1表示负数。
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int b = 3; System.out.print( b >> 2);//0 } }
- 示例:3 >>>2,不管首位是0还是1,在左边空位都是补0。
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int b = 3; System.out.print( b >>> 2);//0 } }
- 面试题1:最有效率的方式算出2*8等于几?
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { System.out.print(2 << 3); } }
-
面试题2:对两个整数变量的值进行交换(不需要第三变量)
- 思路①,有弊端,如果两个整数的数值太大,会超出int范围,会引起精度问题。
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 2; int b = 3; a = a - b ; b = a + b; a = b - a; System.out.print("a="+a+",b="+b); } }
-
- 思路②
package java003; /** * 2017/8/31. * 说明:位运算符 */ public class OperateDemo3 { public static void main(String[] args) { int a = 2; int b = 3; a = a ^ b; b = a ^ b ; a = a ^ b; System.out.print("a="+a+",b="+b); } }
1.4 三元运算符
- 格式:
- (条件表达式) ? 表达式1 :表达式2;
- 如果条件表达式为true,运算后的结果是表达式1,
- 如果条件表达式为false,运算后的结果是表达式2。
- 示例:求两个整数的最大值。
package java003; /** * 2017/9/1. * 说明:三元运算符 */ public class OperateDemo4 { public static void main(String[] args) { int a = 3; int b = 10; int c = (a >= b) ? a : b; System.out.print("最大值是:"+c); } }
2 程序的流程控制
- 程序的流程控制分为:
- 顺序结构
- 分支结构
- 循环结构
2.1 顺序结构
- 示例:
package java003; import sun.applet.Main; /** * 2017/9/1. * 说明:顺序结构 */ public class OperateDemo5 { public static void main(String[] args) { System.out.print("哈哈"); System.out.print("呵呵"); System.out.print("嘻嘻"); System.out.print("笨笨"); } }
2.2 分支语句
2.2.1 分支语句之if语句
- 格式1
if(条件表达式){ 执行语句; }
- 格式2
if(条件表达式){ 执行语句1; }else{ 执行语句2; }
- 格式3
if(条件表达式1){ 执行语句1; }else if(条件表达式2){ 执行语句2; }else{ 执行语句3; }
- 示例:
package java003; /** * 2017/9/1. * 说明:if */ public class IfDemo1 { public static void main(String[] args) { int x = 3; if(x > 1){ System.out.println("正确"); } System.out.println("结束"); } }
- 示例:
package java003; /** * 2017/9/1. * 说明:if */ public class IfDemo2 { public static void main(String[] args) { char gender = '男'; if(gender == '男'){ System.out.println("性别为男"); }else{ System.out.println("性别为女"); } } }
- 示例:
package java003; /** * 2017/9/1. * 说明:if */ public class IfDemo3 { public static void main(String[] args) { int x = 3; if(x >1){ System.out.print("a"); }else if(x >2){ System.out.print("b"); }else if(x >3){ System.out.print("c"); }else{ System.out.print("d"); } } }
- 练习一:用户输入指定的数字,然后输出对应的星期几?
package java003; /** * 2017/9/1. * 说明: */ public class IfTest1 { public static void main(String[] args) { int i = 5; if(i == 1){ System.out.print("星期一"); }else if(i == 2){ System.out.print("星期二"); }else if(i == 3){ System.out.print("星期三"); }else if(i == 4){ System.out.print("星期四"); }else if(i == 5){ System.out.print("星期五"); }else if(i == 6){ System.out.print("星期六"); }else if(i == 7){ System.out.print("星期日"); }else{ System.out.print("输入错误"); } } }
- 练习二:根据指定月份,输出对应的季节
package java003; /** * 2017/9/1. * 说明: */ public class IfTest2 { public static void main(String[] args) { int month = 3; if((month == 3) || (month == 4 )|| (month == 5)){ System.out.print("春季"); }else if((month == 6) || (month == 7 )|| (month == 8)){ System.out.print("夏季"); }else if((month == 9) || (month == 10 )|| (month == 11)){ System.out.print("秋季"); }else if((month == 12) || (month == 1 )|| (month == 2)){ System.out.print("冬季"); }else{ System.out.print("输入错误"); } } }
2.2.2 分支语句之switch语句
- 格式
switch(表达式){ case 值1: 执行语句1; break; case 值2: 执行语句2; break; …… default: 执行语句n; break; }
-
- 说明:在JDK7之前,表达式可以是byte、short、int和char类型。在JDK7之后,支持String类型。
- 示例:
package java003; /** * 2017/9/1. * 说明:switch */ public class SwitchDemo { public static void main(String[] args) { int x = 3; switch (x){ case 1: System.out.print("x=1"); break; case 2: System.out.print("x=2"); break; case 3: System.out.print("x=3"); break; default: System.out.print("呵呵"); break; } } }
- 练习:根据数字输出对应的星期几?
package java003; /** * 2017/9/1. * 说明:输入数字对应星期几? */ public class SwitchTest { public static void main(String[] args) { int day = 3; switch (day){ case 1: System.out.print("星期一"); break; case 2: System.out.print("星期二"); break; case 3: System.out.print("星期三"); break; case 4: System.out.print("星期四"); break; case 5: System.out.print("星期五"); break; case 6: System.out.print("星期六"); break; case 7: System.out.print("星期七"); break; default: System.out.print("输入错误"); break; } } }
2.2.3 if和switch的区别
- if
- ①对具体的值进行判断。
- ②对区间进行判断。
- ③对运算结果是boolean类型的表达式进行判断。
- switch
- ①对具体的值进行判断。
- ②值得个数是固定的。
2.3 循环结构
2.3.1 while循环
- 格式
while(条件表达式){ 执行语句; }
- 示例:
package java003; /** * 2017/9/1. * 说明:while */ public class WhileDemo { public static void main(String[] args) { int x = 1 ; while(x <= 3){ System.out.println("x="+x); x++; } } }
package java003; /** * 2017/9/1. * 说明:while */ public class WhileDemo { public static void main(String[] args) { int x = 1 ; while(x++ <= 3){ System.out.println("x="+x); } } }
- 练习:获取1到10的和。
package java003; /** * 2017/9/1. * 说明:计算从1到10的和 */ public class WhileTest { public static void main(String[] args) { int sum = 0; int i = 1 ; while(i<= 10 ){ sum += i; i++; } System.out.println("1到10的和是:"+sum); } }
2.3.2 do-while循环
- 格式
do{ 执行语句; }while(条件表达式);
- 示例:
package java003; /** * 2017/9/1. * 说明: */ public class DoWhileDemo { public static void main(String[] args) { int x = 1; do{ System.out.println("x="+x); x++; }while(x <= 3); } }
- do-while语句的特点:无论条件是否满足,循环体至少执行一次。
2.3.3 for循环
- 格式
for(表达式1;表达式2;表达式3){ 执行语句; }
- for循环的执行流程
- ①表达式1只读一次,判断表达式2,为真就执行循环体,然后再执行表达式3,接着继续判断表达式2,重复整个过程,直到表达式2不成立为止。
- ②for和while循环是可以互换的,区别在于for为了循环而定义的变量在for循环结束后就在内存里释放,而while循环使用的变量在循环结束后还可以继续使用。
- ③最简单的无限循环:while(true){},for(;;){},无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环(常见的是if和break搭配)。
- 示例:
package java003; /** * 2017/9/1. * 说明: */ public class ForDemo { public static void main(String[] args) { int sum = 0; for(int x = 1;x <= 10;x ++){ sum += x; } System.out.println("sum="+sum); } }
2.3.4 循环结构的应用场景
- 当对某些代码执行很多次的时候,使用循环结构来完成。