首页 > 其他分享 >数据类型转换&表达式&运算符总结

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

时间:2023-12-28 20:46:55浏览次数:36  
标签:类型转换 运算 int 运算符 类型 true 表达式

总结

数据类型转换

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

  • 作用:

    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 次方。

标签:类型转换,运算,int,运算符,类型,true,表达式
From: https://www.cnblogs.com/JunYuanStudy/p/17933521.html

相关文章

  • Kotlin的Lambda表达式
    Kotlin中的Lambda表达式提供了一种强大且灵活的方式来定义一个匿名函数(一个没有名字的函数)。Lambda表达式在处理集合、实现事件监听器、以及其他需要简洁且专注的函数式编程场景中非常有用。以下是一些KotlinLambda表达式的示例:1.基本Lambda表达式假设我们有一个简单的需求:对......
  • 正则表达式语法速查
    字符说明\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,n匹配字符n。\n匹配换行符。序列\\匹配\,\(匹配(。^匹配输入字符串开始的位置。如果设置了RegExp对象的Multiline属性,^还会与"\n"或"\r"之后的位置匹配。$匹配输入字符串结尾......
  • 【类型转换】使用c#实现简易的类型转换(Emit,Expression,反射)
    引言哈喽。大家好,好久不见,最近遇到了一个场景,就是在FrameWork的asp.netmvc中,有个系统里面使用的是EntityFramework的框架,在这个框架里,提供了一个SqlQuery的方法,这个方法很好用啊,以至于在EFCORE8里面又添加了回来,不过不知道性能怎么样,我遇到的场景是通过SqlQuery查询的时......
  • 快速熟悉Lambda表达式
    在Java基础课程中有一个工具非常好用,但不常用就很容易忘记。大家一定已经猜到,它就是Lambda表达式,一个会者不难的工具。今天我们就来快速熟悉下Lambda表达式。1.没有Lambda表达式的编码习惯先聊一个简单的面试题,匿名内部类和多态有什么关系?相信大家都会脑补在Java基础部分的内部类知......
  • SpringBoot+JaywayJsonPath实现Json数据的DSL(按照指定节点表达式解析json获取指定数
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:若依前后端分离版手把手教你本地搭建环境并运行项目_前后端分离项目本地运行在上面搭建SpringBoot项目的基础上,并且在项目中引入fastjson、hutool等所需依赖后。JaywayJsonPath:GitHub-json-path/JsonPath:JavaJsonPathi......
  • lightdb/postgresql中plpgsql、函数与操作符、表达式及其内部实现
    PG_PROCPG_OPERATORpg_opclass用于定义索引上的相关操作符,一般来说是同一类数据类型。pg_opfamiliy定义了相互兼容的数据类型的操作符,关系见https://www.postgresql.org/docs/9.1/catalog-pg-opclass.html。pg8.3引入pg_opfamilies,原因:Create "operatorfamilies" toimprove......
  • Apache Commons JEXL:强大的表达式工具
    第1章:引言大家好,我是小黑,今天咱们来聊聊ApacheCommonsJEXL。可能有些朋友对这个名字感到陌生,没关系,咱们慢慢来解释。JEXL,全称是JavaExpressionLanguage,中文意思就是Java表达式语言。它能让咱们在编程时更灵活、更高效地处理各种复杂的逻辑。说到表达式语言,可能咱们首先想到......
  • 正则表达式
    JavaScript中的正则表达式是一种强大的文本处理工具,它可以用于匹配、搜索、替换和拆分字符串。正则表达式的基本语法如下:^:匹配输入字符串的开始位置。$:匹配输入字符串的结束位置。.:匹配除换行符以外的任何字符。*:匹配前面的子表达式零次或多次。+:匹配前面的子表达式一次或......
  • springboot注解表达式
    ("execution(*com.aop..*.*(..))")1、execution():表达式主体2、第一个*号:表示返回类型,*号表示所有的类型3、.包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包4、第二个*号:表示类名,号表示所有的类5、.*(..):最后这个星号表示方法名,号表示所有的方法,后......
  • Kotlin的范围表达式
    Kotlin的范围表达式提供了一种非常方便的方法来表示一个序列,例如数字的序列、字符的序列等。以下是Kotlin中常见的范围表达式的使用方法:1.使用..操作符创建范围:valaToZ='a'..'z'//包括从'a'到'z'的所有字符valoneToTen=1..10//包括从1到10的所有整数2.使用unti......