尚学堂 JAVA Day3 概念总结

java中的运算符

1、算术运算符 + - * / % Arithmetic operators
+ 运算符有三种身份 Additive Operator
1)加法:如 a + b;
2)连接:如 “北京” + 2008 ---》 北京2008
3)正号:如 +a; int a = 5, a = +5;

- 运算符有两种身份 Subtraction Operator

1)减法:如 a - b;

2)负号:如 -a; int a = 5, a = -5;

* 运算法有一种身份 Multiplication Operator
乘法 a * b;

/ 运算符有一种身份 Division Operator
除法 a / b;

注意:当/的左右两边都为整数时,结果也将为整数,即使真实结果是小数。

% 运算法有一种身份 Remainder Operator
取模运算。
如:a % b, 表示a/b然后取余数。

练习:请使用/ 和 % 运算符,将数字1234的各位数字分离出来。

 1 public class Test1 {
 2     public static void main(String[] args) {
 3 
 4         int a = 1234;
 5         int g;
 6         int s;
 7         int b;
 8         int q;
 9 
10         q = a / 1000;
11         System.out.println("1234的千位上是:" + q);
12 
13         b = (a % 1000) / 100;
14         System.out.println("1234的百位上是:" + b);
15         
16         s = (a % 1200) / 10;
17         System.out.println("1234的十位上是:" + s);
18 
19         g = (a % 1230);
20         System.out.println("1234的个位上是:" + g);
21 
22     }
23 }
View Code

2、赋值运算符 = Asssignment Operators

格式:
变量 = 表达式;
作用:
将等号右边表达式的值赋给左边的变量存放。
如:int a = 5 * 6 +3;

3、自增、自减运算符 ++、 -- increment operator\decrement operator
格式:
变量++ 或 ++变量;
变量-- 或 --变量;
前加: ++a; 规则:先增加后使用(赋值)
后加: a++; 规则:先使用后增加
注意:无论是前加还是后加,a的值都会增加1

如:a = 5;
b = a++;
结果为:
b = 5, a = 6;

又如:
a = 5;
b = ++a;
结果为:
b = 6, a = 6;

练习1:a = 2;
a = a++;
结果为:
a = 2;
其运算过程为:
1) 将a中的内容取出,放在临时的存储单元中;
2) a本身的存储单元内容2自增1变成3;
3) 临时存储单元的值2,存入变量a的存储单元中,正号覆盖了原来的数值3;
所以a = 2;
练习2: a = 2,
b = a++ + a++ + a++;
其结果为:
a = 5;
b = 9;
其运算过程为:
1) 第一个a++运算,将a取出为2;然后a+1=3;
2) 计算第一个 + 双目运算符,左边为2 ,右边为3,结果为5;
3) 此时a = 3;重复第1) 2)步的操作,得到a = 5,b = 9.

 1 public class Test2 {
 2     public static void main(String[] args) {
 3 
 4         int a = 2;
 5         a = a++;
 6         System.out.println("a = " + a);
 7 
 8 
 9         int c = 2;
10         int b;
11         b = c++ + c++ + c++;
12         System.out.println("c = " + c + "\n" + "b = " + b);
13         
14         
15     }
16 }
View Code

4、关系运算符 >, <, >=, <=, ==, !=, instanceof ----- Relation operators

如:boolean flag = 'a' instanceof char;

 1 public class OpTest1 {
 2     public static void main(String[] args) {
 3         int b = 200000;
 4         int a = 300;
 5         boolean bFlag;
 6         bFlag =  b > a;
 7         System.out.println(b + "大于" + a + "?\n" + bFlag);
 8 
 9         bFlag = b < a;
10         System.out.println(b + "小于" + a +"? \n" + bFlag);
11 
12         bFlag = (b >= a);
13         System.out.println(b + "大于等于" + a + "?\n" + bFlag);
14 
15         bFlag = (b <= a);
16         System.out.println(b + "小于等于" + a + "?\n" + bFlag);
17 
18         bFlag = (b == a);
19         System.out.println(b + "等于" + a + "?\n" + bFlag);
20 
21         bFlag = (b !=a );
22         System.out.println(b + "不等于" + a + "?\n" + bFlag);
23     }
24 }
View Code

5、逻辑运算符:&与、|或、!非、&&短路与、||短路非 ----- Logic operators

1) &与
格式: 表达式1 & 表达式2
规则:当&符号两边的表达式均为true时,与运算表达式的值为true;反之为false.
2) |或
格式:表达式1 | 表达式2
规则:当|符号两边的表达式有一个为true时,|运算表达式的值为true;反之为false.
3) !运算
格式:!表达式
规则:当表达式为true是,费运算结果为false;反之为true.
4) && 短路与
格式: 表达式1 && 表达式2
规则:当&&符号的两边表达式值都为true时,短路与的值为true;反之为false.
注意:当短路与的表达式1为false时,表达式2中的操作将不再执行。因此提高了代码的运行效率。
5)|| 短路或
格式: 表达式1 || 表达式2
规则:当短路或符号两边的表达式有一个为false时,短路或的值为false;反之为true.
注意:当短路或的表达式1为true时,短路或将直接被赋值为true,表达式2中的代码将不再执行。
从而提高了代码的运行效率。

 1 public class LogicOp {
 2     public static void main(String[] args) {
 3 
 4         /*    
 5             逻辑运算符:&与、|或、!非、&&短路与、||短路非
 6                 1) &与
 7                     格式: 表达式1 & 表达式2
 8                     规则:当&符号两边的表达式均为true时,与运算表达式的值为true;反之为false.
 9                 2) |或
10                     格式:表达式1 | 表达式2
11                     规则:当|符号两边的表达式有一个为true时,|运算表达式的值为true;反之为false.
12                 3) !运算
13                     格式:!表达式
14                     规则:当表达式为true是,费运算结果为false;反之为true.
15                 4) && 短路与
16                     格式: 表达式1 && 表达式2
17                     规则:当&&符号的两边表达式值都为true时,短路与的值为true;反之为false.
18                 注意:当短路与的表达式1为false时,表达式2中的操作将不再执行。因此提高了代码的运行效率。
19                 5)|| 短路或
20                     格式: 表达式1 || 表达式2
21                     规则:当短路或符号两边的表达式有一个为false时,短路或的值为false;反之为true.
22                 注意:当短路或的表达式1为true时,短路或将直接被赋值为true,表达式2中的代码将不再执行。
23                 从而提高了代码的运行效率。
24 
25         */
26 
27         int a = 4;
28         int b = 6;
29         System.out.println("a = " + a);
30         //boolean bl = (6 < a) & (6 > ++a);        // &运算符
31         //boolean bl = (6 < a) | (6 == ++a);    // |运算符
32         //boolean bl = !(6 > a);                // !运算符
33         //boolean bl = (6 < a) && (6 > ++a);    // &&短路与运算符
34         boolean bl =  (6 < a) || (6 > ++a);        // ||短路或运算符
35 
36         System.out.println("b1 = " + bl);
37         System.out.println("a = " + a);
38 
39     }
40 }
View Code

6、三目运算符 Ternary Operator

格式:
表达式0 = 表达式1 ? 表达式2 :表达式3
规则:
当表达式1的值为true时,表达式0的值为表达式2的值,否则,表达式0等于表达式3的值。

练习1:通过三目运算符,使用一个语句比较任意三个整数的大小,并将最大值赋给三目运算符。
练习2:写一个比较两个数大小的方法,并用该方法标胶任意三个整数的大小。

 1 public class TernaryOp {
 2     
 3     /*
 4         三目运算符 Ternary Operator
 5         格式:
 6             表达式0 = 表达式1 ? 表达式2 :表达式3
 7         规则:
 8             当表达式1的值为true时,表达式0的值为表达式2的值,否则,表达式0等于表达式3的值。
 9     */
10 
11     public static void main(String[] args) {
12 
13         int a = 8;
14         int b = 8887;
15         int c = 8392884;
16 
17         //练习1的实现方法
18         int max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
19         System.out.println(a + "," + b +","+ c + "中的较大者是:" + max);
20 
21         //练习2的实现方法
22         int middleOne = maxNum(a,b);
23         int theMax = maxNum(middleOne,c);
24         System.out.println(a + "," + b +","+ c + "中的较大者是:" + max);
25          
26 
27     }
28 
29     public static int maxNum(int x, int y) {
30 
31         int z = x > y ? x : y;
32         return z;
33     
34     } 
35 
36 }
View Code

7、扩展赋值运算符 +=, -=, *=, /=, %= Extended Assignment operators

 1 public class AssignOp {
 2     public static void main(String[] args) {
 3         
 4         /*    
 5             扩展的赋值运算符 Extended Assignment Operators
 6             +=    -=    *=    /=    %=
 7             作用:可以自动对数据类型进行转换后参与计算。
 8         */
 9 
10         byte b = 127;
11         short s = 489;
12         int a = 10000;
13         float f = 3.14f;
14 
15         b += 1;
16         //b = b + 1;     //将抛出异常 “不兼容的类型: 从int转换到byte可能会有损失”     因为这里试图将int型数据赋值给byte类型
17         System.out.println("byte b 用 += 赋值运算符后 b = " + b);
18 
19         s -= 30;
20         //s = s - 30;     //将抛出异常 "不兼容的类型: 从int转换到short可能会有损失”     因为这里试图将int型数据赋值给short类型
21         System.out.println("short s 用 -= 赋值运算符后 s = " + s);
22 
23         a /= 1.0;
24         System.out.println("int a 用 /= 赋值运算符后 a = " + a);
25 
26         f *= 2.0;
27         //f = f * 2.0; //     将抛出异常 “不兼容的类型: 从double转换到float可能会有损失” 因为这里试图将double类型数据赋值给float类型
28         System.out.println("float f 用 *= 赋值运算符后 f = " + f);
29 
30     }
31 }
View Code

8、数据类型的转换

1) 自动转换
小类型数据赋值给大类型时,将自动转换为大类型数据;
使用扩展复制运算符时,也会将等号右边的数据进行自动转换。
2) 强制转换
大类型数据赋值给小类型是,需要对大类型数据进行强制转换。
如:
byte b = 120;
int a = b; ---自动转换

int a = 120;
byte b = (byte)a; ---强制转换才行,否则将在编译时抛出损失精度异常

9、在java中,表达式的数据类型如何确定?
1) 表达式中有double数据时,表达式为double类型;
2) 表达式中没有double,但是有float时,表达式为float类型;
3) 表达式中没有double,也没有float, 但是有long时,表达式为long类型;
4) 表达式中没有double, float,和 long时, 表达式为int类型。


10、Math类
Math.abs();
Math.sqrt();
Math.pow(double a, double b);
Math.round(double a);
Math.ceil(double a);
Math.floor(double a);
Math.random();

练习1、产生一个[-100,100]之间的随机整数;
练习2、产生一个[321,9999]之间的随机整数;
练习3、产生一个四舍五入,保留两位小数的随机型数据,其范围是[0, 100]。

 1 public class HomeWork1 {
 2     /*
 3          产生一个 [-100, 100] 范围的随机整数。
 4 
 5          注意:random产生的随机数是 [0,1) 一个左闭右开区间
 6     */
 7 
 8     public static void main(String[] args) {
 9 
10         int temp = 0;
11         
12         temp += Math.floor( 201 * Math.random() - 100 );
13         
14         System.out.println("temp = " + temp);
15         
16     }
17 
18 }
View Code
 1 public class HomeWork2 {
 2     
 3     /*
 4         练习2:    产生一个 [321,   9999] 范围的随机整数。
 5     */
 6     
 7     public static void main(String[] args) {
 8          int temp = 0;
 9          temp += Math.floor( Math.random() * 10321 - 321 );
10          System.out.println("temp = " + temp);
11     }
12 
13 }
View Code
 1 public class HomeWork3 {
 2     /*
 3         练习3:产生一个四舍五入,保留两位小数的随机型的double数, 其范围是[0, 100] 。
 4     */
 5         
 6     public static void main(String[] args) {
 7 
 8         double temp = 0;
 9         temp += Math.round(  10000 * Math.random()  ) ;
10         temp /= 100;
11 
12         System.out.println("temp = " + temp);
13 
14     }
15 }
View Code

练习三有一个疑问:

当随机数取出后,当两位小数的末尾为0时,最后一位0没有显示输出。

如:29.20会显示成29.2,这是为什么?

posted @ 2016-07-04 18:57  一夏鸣蝉  阅读(182)  评论(0编辑  收藏  举报