zoukankan      html  css  js  c++  java
  • 03-基础语法2

    【基本数据类型】对于每一种数据都定义了明确的具体数据类型(强类型语言),在内存中分配了不同大小的内存空间。

    1. 整型变量/常量

    整型用于表示没有小数部分的数值,它允许是负数。整型的范围与运行 Java 代码的机器无关,这正是 Java 程序具有很强移植能力的原因之一。与此相反,C 和 C++ 程序需要针对不同的处理器选择最有效的整型。

    为什么在初始化 long 类型变量的时候 ,值的末尾要加上 L?

    • Java语言的整型常数默认为int型
    • 当定义的变量类型是 byte/short 时,赋值的时候会自动检查该整型常量是否在声明的类型的取值范围内:如果在,就会自动类型转换;如果不在,就会报错(在编译期)
    • 当声明的变量类型是 long 时,还是那句话:整数默认是 int 类型的;虽然你声明的变量是 long 类型,但是你后边的那个数值默认就是 int 型。所以,当编译的时候,会因为数值超过 int 类型的范围而报错 (long 无法自动强转为 int,怕精度丢失)。
    • 故long型变量初始化时,值末尾必须添加 "l" / "L"

    2. 浮点型变量/常量

    带小数的数据在Java中称为浮点型。浮点型可分为 float 类型和 double 类型:

    • float
      • float 类型又被称作单精度类型,尾数可以精确到 7 位有效数字,在很多情况下,float 类型的精度很难满足需求。
      • 浮点型常量默认类型也是 double,float 类型赋值时需要添加后缀 F/f。
      • float 类型的数值有一个后缀 F 或者 f ,没有后缀 F/f 的浮点数值默认为 double 类型(与上面同理)
    • double
      • double 表示这种类型的数值精度约是 float 类型的两倍,又被称作双精度类型
      • 浮点型常量默认类型是 double,也可以在浮点数值后添加后缀 D 或者 d, 以明确其为 double 类型。

    Java 浮点类型常量有两种表示形式:

    • 十进制数形式,例如:3.14、314.0、0.314
    • 科学记数法形式,例如:314e2、314E2、314E-2 // 如下使用科学记数法给浮点型变量赋值

    Tip1:为什么 int 和 float 类型都占有 4 个字节,但是 float 类型表示范围却比 int 类型大好多?

    摘自:https://blog.csdn.net/C2681595858/article/details/84865920

    Tip2:浮点数存在舍入误差,数字不能精确表示

    • 运行以下两个示例,发现示例 1 的结果是 " false ",而示例 2 的输出结果是 " d1 == d2 " 。这是因为由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。 浮点数一般都存在舍入误差,很多数字无法精确表示(例如 0.1),其结果只能是接近, 但不等于。二进制浮点数不能精确的表示 0.1、0.01、0.001 这样 10 的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。
    • 如果需要进行不产生舍入误差的精确数字计算,需要使用 java.math 包下面的两个有用的类:BigInteger 和 BigDecimal,这两个类可以处理任意长度的数值 // BigInteger 实现了任意精度的整数运算,BigDecimal 实现了任意精度的浮点运算。

    3. 字符型变量/常量

    字符型在内存中占 2 个字节,在 Java 中使用「单引号」来表示字符常量。

    注意! 'a' 是一个字符,它与 "a" 是不同的,"a" 表示含有一个字符的字符串

    • 允许使用转义字符 ' ' 来将其后的字符转变为其它的含义
    • 转义字符
    • 字符型的十六进制值表示方法
      • char 类型用来表示在 Unicode 编码表中的字符
      • Unicode 编码被设计用来处理各种语言的文字,它占 2 个字节,可允许有 65536 个字符
      • Unicode 具有从 0 到 65535 之间的编码,他们通常用从 'u0000' 到 'uFFFF' 之间的十六进制值来表示(前缀为 u 表示 Unicode)

    这也就是为啥 char 类型可以参加算术运算~它将其编码转成一个 int 类型数值参与运算;同理,也可以这么给 char 类型变量赋值。

    4. 布尔类型变量/常量

    • boolean 类型有两个常量值:true 和 false,在内存中占一位 (不是 1 个字节)。注意!不可以使用 0 或 !0 的整数替代 true 和 false,这点和 C 语言不同。
    • boolean 类型用来判断逻辑条件,一般用于程序流程控制

    类型转换

    5. 类型转换

    5.1 自动类型转换

    [自动类型转换] 指的是 {容量小的数据类型} 可以自动转换为 {容量大的数据类型}
    [容量大小] 指的是 数据类型所表示的数据范围的大和小 !而不是说它所占用的内存空间的大小

    • 数据类型按容量大小排序(当有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算)
    • 测试
    • 可以将整型常量直接赋值给 byte、 short、 char 等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可 // 整型变量赋给这仨就算不超范围也会报错~ 详见下面的小问题
    • 容量大小:float(4) > long(8)
    • Tips
      • boolean 类型不能与其它数据类型运算
      • byte, short, char 之间不会相互转换,他们三者在计算时首先转换为 int 类型 (包括本类型之间做运算)
      • 当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型
    • 小问题

    5.2 强制类型转换

    自动类型提升运算的逆运算,用于显式的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过强转来完成的,但可能造成精度降低或溢出。

    • 语法格式
    • 测试
    • 当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成为一个完全不同的值
    • 小问题

    6. String

    • String 不是基本数据类型,属于引用数据类型
    • String 类其实就是字符序列 (char sequence)
    • 一个字符串可以串接另一个字符串,也可以直接串接其他类型的数据
    • 当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类型的值将自动转化为字符串(String)类型
    • 到底是做运算还是做连接?
  • 相关阅读:
    基于redis的分布式锁实现方案
    nginx 配置文件详解
    Linux 下安装Nginx
    Nginx简介
    Spring Boot 整合 Spring Security 示例实现前后分离权限注解 + JWT 登录认证
    idea2020.1版本下载安装与激活
    Cloud Alibaba --Nacos
    spring Cloud Alibaba 简介
    Eclipse中SVN更改连接用户
    Win7(64bit)搭建SVN
  • 原文地址:https://www.cnblogs.com/liujiaqi1101/p/12793249.html
Copyright © 2011-2022 走看看