Java -- 数据类型

387 阅读5分钟

一、数据类型的意义

数据类型是为了对变量的种类进行划分
也就是说,程序运行的时候那些可变的量需要开辟出一块内存空间来保存,那么我们应该在内存中给它分配多大的空间来存储呢?每一个数据都需要多大的内存?可以都分配4个字节嘛?
所以就有了数据类型的存在,为了更合理的节约的使用内存空间,每一个量我们都根据它的类型来分配,更好的利用了内存空间。

二、Java中的数据类型

Java是一种强类型语言。 why?
由于为每一个变量声明一种类型,且所有的数值类型所占字节数量与平台无关。

Java中数据类型分为了8种基本数据类型和引用类型。

三、基本数据类型

1. 整型

整型用于表示整数。(包括正整数和负整数)

类型存储大小取值范围包装类
int4字节-2147483648 ~ 2147483647 (21亿左右)java.lang.Integer
short2字节-32768 ~ 32767java.lang.Short
long8字节-9223372036854775808 ~ 9223372036854775807java.lang.Long
byte1字节-128 ~ 127java.lang.Byte

** 在java中,整型的范围与运行java代码的机器无关(体现了一次编译到处运行)
注:
① 长整型数值有一个后缀L或l。
② 进制表示

进制前缀       
二进制  0b
八进制  0
十六进制  0x

③ java中没有任何无符号形式的类型
若必须要用byte表示表示0 ~ 255,可以调用Byte.toUnsignedInt(b)来得到int值进行处理,再转回byte。

2. 浮点型

浮点型用于表示有小数部分的数值。

类型存储大小取值范围包装类
float4字节 有效位数为6 ~ 7位    java.lang.Float
double8字节 有效位数为15位java.lang.Double

注:
① float类型的数值有一个后缀f或者F,没有后缀默认是double类型
② 浮点数不适合运算无法接受舍入误差的金融计算。浮点数采用二进制,无法精确表示所有的分数,所以,计算时会出现误差。如果要求必须没有任何舍入误差,可以使用BigDecimal。

3. 字符型

① char类型用于表示单个字符,char类型的字面常量值要用单引号括起来。
② 它在内存中占2字节,将字符转换为二进制存储,就必须依靠Unicode编码机制。
③ 它的包装类是java.lang.Character

特殊字符的转义

常见的转义字符的转义序列
      转义序列        名称         Unicode
          \b            退格         \u0008
          \t            制表         \u0009
          \n            换行         \u000a
          \r            回车         \u000d
          \"            双引号       \u0022
          \'            单引号       \u0027
          \            反斜杠       \u005c

4. 布尔类型

boolean类型有两个值:false和true,用来进行逻辑判断条件, 整型和布尔类型之间不能进行相互转换。

四、变量与常量

1.变量

变量名要求:
Ⅰ 变量名见名思义
Ⅱ 不建议采用下划线和 $ 开头或者结尾
Ⅲ 是小驼峰的形式
Ⅳ 不要以数字开头
Ⅴ 最好不要用拼音来命名。
Ⅵ 不能使用Java的保留字作为变量名

2. 常量

① 字面常量

② final关键字修饰的常量

关键字final表示这个变量只能被赋值一次,一旦赋值就不能被修改了。一般这样定义的常量采用全大写来表示。

若用static final修饰则为一个类常量,它可以在一个类中的多个方法中使用,它通常定义在main方法的外部。如果这个常变量是一个public的,则在其它类的方法中也可以使用。

五、数据类型的转换

1. 自动转化

数据类型自动转换:将取值范围小的类型自动转换为取值范围大的类型。

public class DataDemo {
    public static void main(String[] args) {
        int a = 1;
        byte b = 2;
//      byte c = a + b;
//      int类型和byte类型运算,结果是int类型
        int c = a + b;
        System.out.println(c);
    }
}

转换规则:

​ 范围小的类型向范围大的类型提升:byte、short、char 运算时候直接提升为 int。

​ byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double。

2. 强制类型转换

强制类型转换:将 取值范围大的类型强制转换成取值范围小的类型 。

public class DataDemo2 {
    public static void main(String[] args) {

        /**
         *  int a=1.5; 编译失败,无法赋值
         */
        int i = (int)1.5;
        double d=2.5;
        //int类型和double类型运算,结果是double类型
        //int类型会提升为double类型
        double e = d + i;
        System.out.println(e);
    }
}

​ 浮点转成整数,直接取消小数点,可能造成数据损失精度。

​ int 强制转成 short 砍掉2个字节,可能造成数据丢失。