黑马程序员技术交流社区

标题: 【南京校区】JavaSE之运算符 [打印本页]

作者: 大蓝鲸Java    时间: 2019-5-24 13:06
标题: 【南京校区】JavaSE之运算符
1,+-*/% 运算符的作用。
                为什么变量在参与运算的时候需要类型的提升?
                Java规定了,只有同一种数据类型的变量在参与运算,才能得到结果。
                如果类型不一样,那么前后是不能运算的

                int i = 10;
                long l = 100L;
                i + l; //在Java中这样是不能直接运算的。
                                //因为前面的是int类型。后面的是long类型
                                //类型不一致,所以不能直接运算。
                                //如果一定要让这两个相加,那么必须要进行类型的转换

类型的转换的规则:
        1.取值范围比int小的变量,在参与运算的时候会自动提升为 int 类型
                byte short char

        byte b1 = 10;
        byte b2 = 20;
        byte b = b1 + b2; //b1和b2取值范围比int小,在参与运算的时候类型会自动提升为int
        System.out.println(b);

        2.取值范围比int大的变量,在参与运算的时候会提升为取值范围最大的那个类型。
       
        int i = 10;
        int ii = 20;
        int result = i + ii;//数据类型刚好是int,所以可以直接参与运算

        float f = 10.1F;
        double d = 20.2;
        double result = f + d;//f是float类型的,d是double类型的,取值范围都比int大。
                                                  //而double的取值范围是最大的,所以最终就提升为double

        强调:
                所有的小数取值范围一定比所有的整数取值范围要大
                double > float > long > int > short > byte
               


2.字符+和字符串+       

        字符串的+:拼接。
                任意数据类型的变量或者值 + 字符串 那么做的都是拼接操作。
                System.out.println(1 + "a");//1a
                System.out.println("a" + 1);//a1
                System.out.println(1 + "a" + 1);//1a1
                System.out.println(1 + 2 + "a");//3a
                System.out.println("a" + 1 + 2);//a12
                System.out.println(1 + 2 + "a" + 1 + 2);//3a12
       



        "aaa" + "bbb" = "aaabbb"

        "aaa" + "bbb" + "ccc" = "aaabbbccc"

        1 + "abc" = "1abc"

        "abc" + 123 = "abc123"

        123 + 123 + "abc" = "246abc"



        字符+
                字符参与运算的时候,会先把字符变成数字,再拿着这个数字参与运算。
                我怎么知道字符对应的数字是什么啊?
                计算机中的一张表 ASCII码表
                为什么要有这样的表?就是因为计算机在存储的时候都是以二进制0101010101这样的形式存储的。
                为了能让计算机能存储字母,所以拿着每一个字母跟固定的数字都产生一个对应关系,就是为了解决字母存储问题。
                在ASCII码表中,数字跟字母都有一个 一一对应的关系。
               
                'a' 只能对应数字 97
                97 也只能对应字母 'a'



        'a' + 1 = 98
                会先查码表'a' 先变成97,
                再拿着97参与运算。
                97 + 1 = 98


总结:
        字符串+ : 就是拼接
       
        字符参与运算 就是先查找再计算。



4,看代码说结果
        int a = 10;
        a++; //就是把a这个变量记录的值+1. 当这行代码执行完毕时,a就变成了11.
        ++a; //就是把a这个变量记录的值+1. 当这行代码执行完毕时,a就变成了12.
        System.out.println(a);//12

        所以自增自减运算符,只要大家掌握单独成一行的计算规则就可以了。
        因为以后我们基本上都是单独成行书写的。

        以自增为例,不管是先++ 还是后++。
        只要单独成一行,那么结果都是一样的。都是让变量的值自动增长一个。


       


5,
  int a = 10;
  a = a + 20;
                //运算完毕之后a为30
  与
  int a = 10;
  a+=20;
  问两者的区别?
       
+= :
        就是把左边和右边的值进行相加操作,再把结果赋值给左边。
        其中还隐藏了一个强制类型转换

        byte b = 10;
        b += 20;
        相当于: b = (byte)(b + 20);








6, & |  的区别:

       
        注意点:
                1.这两个运算符怎么打出来?  &(shift + 7)                        |(shift + 杠(一般是在回车的上面))
                2.运算逻辑:
                        &:且
                                只有左边和右边都是true时,结果才是true。
                        |: 或
                                只要左边和右边有一个为true,那么结果就是true。
       

        &与&&的区别:
                最终运算逻辑是一模一样的。
                &:不管在什么情况下,左边和右边都会参与运行。
                        左边的运算逻辑 & 右边的运算逻辑
       
                        左边的运算逻辑 && 右边的运算逻辑
                                如果左边的结果为false,那么右边就不会参与运算了
                       
                        左边的运算逻辑 || 右边的运算逻辑
                                如果左边的结果为true,那么右边就不会参与运算了

                所以在实际开发和后面写练习的时候,我们使用短路&& || 更多一些。




7,三元表达式的格式
        三元表达式/三元运算符
格式:
        表达式A ? 表达式B :表达式C ;               

注意点:
        1.三元表达式不能单独出现,结果一定要被使用。可以直接输出,也可以是赋值。
                int a = 10;
                int b = 20;
               
                a > b ? a : b ; //单独的放在这里是错误的。
               
                //输出
                System.out.println(a > b ? a : b);
                //赋值
                int max = a > b ? a : b;
               
       
        2.表达式B和表达式C数据类型一定要跟左边的接收变量的类型一致。
                案例:
                        int max = a > b ? a : b;
                        max ,a , b 三者之间的数据类型要保持一致。

        3.表达式B和表达式C一定要有一个结果,不能直接写输出语句
                int max = a > b ? System.out.println(a): System.out.println(b);
                //在这样的情况下,没有任何数据可以赋值给max,所以语法错误。


8,完成练习:
        b,定义两个变量。判断两个数是否相等
                int a = 10;
                int b = 20;
               
                boolean result = a == b ? true : false;
                System.out.println(result);





        c,定义三个变量。求最大值
                int a = 10;
                int b = 30;
                int c = 20;

                int temp = a > b ? a : b ;
                int max = temp > c ? temp : c ;
                System.out.println(max);


       
        定义三个变量,求最小值
                int a = 10;
                int b = 30;
                int c = 20;

                int temp = a < b ? a : b ;
                int min = temp < c ? temp : c ;
                System.out.println(min);

       

        扩散:
                定义三个变量,我想把这三个变量从小到大打印出来。
                int a = 10;
                int b = 30;
                int c = 20;

               
                步骤:
                        1、先求出最大值
                                int tempMax = a > b ? a : b ;
                                int max = temp > c ? temp : c ;
                               

                        2、再求出最小值

                                int tempMin = a < b ? a : b ;
                                int min = temp < c ? temp : c ;

                        3、最后求出中间值
                               
                                int mid = a + b + c - max - min;
                                System.out.println("最大值" + max);
                                System.out.println("中间值" + mid);
                                System.out.println("最小值" + min);



        a.定义两个变量。求两个数的和
                int a = 10;
                int b = 20;
               
                int sum = a + b;
                System.out.println(sum);






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2