数据类型转换&表达式&运算符总结

发布时间 2023-12-28 20:44:33作者: ZWJAS

总结

数据类型转换

  • 概念:将数据从一种格式或结构转换为另一种格式或结构的过程。

  • 作用:

    1. 节约内存空间

    2. 将一些类型转换为项目所需要的类型

  • 类型转换分类

    1. 自动隐式转换
    • 定义:将小的数据类型转换大的数据类型

    • 注意事项

      1. 在Java中,boolean类型与所有其他7种类型都不能进行转换。

      2. 其他 7种数据类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化。

        byte -> short -> int -> long-> float-> double

        char -> int -> long-> float-> double

        byte与char 不能自动转换

        char与short不能自动转换

        由于小数(浮点数) 的存储方式,结构和整数不一样,所以,float哪怕是4个字节、long是8个字节,表示范围也大于long类型。

      3. 特例:只看类型,不看值

        int a = 129;
        byte b = (byte)a;// 编译器只看容器不看值
        System.out.println(b);// 结果为-127
        
  1. 强制转换

    • 定义:将大数据类型转为小数据类型
    • 注意事项:
      1. 高转低会导致精度丢失,有数据的溢出风险。溢出的时候,会以二进制进位。
      2. 实际开发中:应该要知道被强制转换的数据,是在一个已知的范围。
      3. 当int类型的具体的值,向byte、short、char类型转换的时候,值只要在其表示范围内,都会隐式转换。
  • 类型转换小结

      byte  short(char)  int long  float(单精度)  double(双精度) (只有数值类型才能相互转换)
      
      ----------------从左到右精度越来越高-------------------->
    
    1. 小转大,都是可以隐式转换 (从左到右)

    2. 大转小,必须强制转换 (从右到左) 强制转换有数据的溢出风险。溢出的时候,会以二进制进位

    3. 强制转换语法:

      小的数据类型 小的变量 = (小的数据类型)大的变量/值;

    4. 当int类型的具体的值,向byte、short、char类型转换的时候,值只要在其表示范围内,都会隐式转换

表达式

  • 表达式概念:由一系列的常量、变量、运算符、括号()等组成的一个算术式,按照一定的运算规则计算出一个结果值。(括号可以提高运算的优先级)

  • 表达式规律:

    1. 当表达式中所有的变量类型小于int的时候,运算后的结果都会自动提升为int类型。
    2. 当表达式中有变量类型大于int的时候,运算后的结果以表达式中精度最高的为主。
  • 表达式小结:

    1. 概念:就是一个算术式。 例如: 1 + 1 + 2*3

    2. 规律:

    ​ 1. 当表达式中所有的变量类型小于 int的时候,运算后的结果都会自动提升为int类型

    ​ 2. 当表达式中有变量类型大于 int的时候,运算后的结果以表达式中精度最高的为主

运算符

  • 算数运算

    • +:加号。只有String字符串参与的加法运算,才有拼接功能,在String之前,表示加法 运算,之后,才表示连接
      -:减号。
      *:乘号。
      /:除号。不能除0

      %:模(也叫取余)相当于求余数。例如:10 % 3 ,表示求10除3的余数,结果是1
      作用:1. 求余数 2. 找一个数的倍数 3. 可以拆分一个多位的数字

    • 特殊情况:

      1. 10 / 3 = 3

      2. 10.0 / 3 = 3.33333…

      3. 0 / 0

      4. 0.0 / 0.0 结果是NaN ,任何的NaN都不等于自己(面试题)

      5. 1.0 / 0.0 结果:Infinity,表示无穷大

  • 自增自减运算

    • 自增自减运算符:++ --

    • 注意事项:

      1. 自增自减只能够用于变量,不能用于常量

      2. 自增自减运算的优先级比其他算术运算符高

      3. 一般用在循环语句中

    • 使用要点:

      1. 把整个表达式看成是一个整体。
      2. 如果变量名在前面,那么整个表达式的值就是原来值不变。
      3. 如果变量名在后面,那么整个表达式的值就是原来的值加1。
  • 赋值运算

    • 赋值运算(Assignment Operation):是优先级最低的一种运算,等 = 后边的所有运算完毕后,才执行赋值运算。

    • 赋值运算符常用的符号:

      += 累加
      -= 累减
      *=
      /=
      %=

    • 赋值运算注意事项:

      1. 从右到左,把符号右边的值赋值到左边的变量中
      2. 上面符号看成是一个整体: 例如 += 看成是一个符号,不要看成两个。
      3. 赋值运算有强制转换功能,可以避免类型提升.会有溢出风险
  • 比较运算

    • 比较运算(Compare Operation):结果一定是boolean类型

    • 常用符号:> ,< ,>= ,<= ,==

    • 注意事项:

      1. 比较基本类型,比较的是值是否相等
        例如:
        int a = 1;
        int b = 1;
        System.out.println(a == b); //true

      2. 比较引用类型,比较的是地址是否相等

      3. !=: 不等于

        1. 比较基本类型,比较的是值是否不相等
        2. 比较引用类型,比较的是地址是否不相等
  • 三目运算

    • 语法: x ? y : z;// 表示如果x为true,执行y,x为false则执行

      x: 是boolean类型值或者boolean表达式。
      y、z: 可以是表达式,也可以是值或者变量。
      y和z可以是不同的数据类型,但是如果要接收三目运算的结果,必须要求y和z的类型完全一致
      三目运算可以嵌套使用

  • 逻辑运算

    • 概念:用来连接布尔类型的两个值或表达式,逻辑运算两边必须是布尔类型的值或者是布尔类型表达式。通常配合循环和条件语句使用,最终结果也位布尔类型

    • 作用:应用于多个条件的组合判断。

    • 逻辑运算符运算规则

      & :逻辑单与,表示并且,有假即假,没有短路功能,有位运算功能,两边都为true ,结果为true。
      | :逻辑单或,表示或者,有真即真,没有短路功能,有位运算功能,只要有一边为true,结果为true。
      && :逻辑双与,表示并且,有假即假,有短路功能,没有位运算功能,两边都为true ,结果为true。
      || : 逻辑双或,表示或者,有真即真,有短路功能,没有位运算功能,只要有一边为true,结果为true。
      ^ : 逻辑异或,同假异真【了解 现实开发,基本不用】,两边不一样,结果为true ,否则为false。
      ! :逻辑非,表示取反,非真即假,非假即真 (操作一个变量/值)。

    • &&、||和 &、| 的区别

      • &&、|| :有短路功能

      • &、| :没有短路功能

      • 什么是短路?

        短路问题:当逻辑运算左边能够确定整个表达式结果值的时候,就会发生短路,不会再计算后面的结果了,这样可以提供程序运算效率。

  • 位运算

    • 概念:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
    • 位运算符
      • ~n: 按位取反,运算的规律:0 -> 1, 1 -> 0。
        记住公式:n的按位取反结果是: -(n + 1)。
        ~3计算过程,先将3转换为二进制0011,再进行位运算
      • &: 按位与,运算的规律:有0即0。
      • |:按位或,运算的规律:有1即1。
      • ^:按位异或,运算的规律:同0异1。常常用来交换两个变量的值。
      • m << n: 按位左位移,将m向左移动n位,运算的规律:右边补0,相当于* 2 ^ n 次方,有溢出风险。
      • m >> n: 按位右位移,运算的规律:如果m是正数,左边补0,是负数就补1 相当于/ 2 ^ n 次方。