Java-Note-002-基本数据类型

Java学习之路 - Note - 002 - 基本数据类型

变量

什么是变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问。
变量指向内存中存在的一块空间(不同的变量,类型不同,占用空间大小不同)。
变量是程序的基本组成单位。不论使用哪种高级程序语言编写的程序,变量都是该程序的基本组成单位。

定义变量时的注意点

Ⅰ. 变量必须先声明,后使用,有顺序。
Ⅱ. 同一个作用域中变量名不能重名。
Ⅲ. 变量的三要素(类型 变量名 值)。

数据类型

基本数据类型

数值型

Ⅰ. 整数类型
byte : 占用1字节, -2^7 ~ 2^7 - 1
short : 占用2字节, -2^15 ~ 2^15 - 1
int : 占用4字节, -2^31 ~ 2^31 - 1
long : 占用8字节, -2^63 ~ 2^63 - 1

Ⅱ. 浮点类型
float : 占用4字节
double: 占用8字节

字符型

char : 占用2字节, 存放单个字符, 用 '' 包含

布尔型

boolean:占用1字节, 存放true, false

引用数据类型

Ⅰ. 类 (class)
Ⅱ. 接口 (interface)
Ⅲ. 数组 ([])

整型

1. 各整数类型有固定的字段范围和长度,不受操作系统的影响。
2. Java的整型常量默认为int型,声明long型常量时须后加"l" 或 "L"。
3. 声明int型时,除非不足以表示大数,才使用long。
4. bit是计算机中最小的存储单位,byte是计算机中基本存储单位。
5. int型在内存空间中为32bit,但long型有64bit,内存空间中仅支持范围广容纳范围小的变量,而范围小的变量不能容纳大范围。

浮点型

1. 构成: 浮点数 = 符号位 + 指数位 + 尾数位。
2. 尾数部分可能会丢失,造成精度缺失(小数都是近似值)。
3. Java浮点数常量默认为double类型,声明float类型,需要在常量后加上 "f" 或 "F"。
4. 通常情况下double 类型(保留十位)的精度比float (保留7位)精度高,更加精确。

public class JavaNote002 {
    public static void main(String[] args) {
        //浮点型常量默认类型为double,声明float型常量时,需后加 'f' 或 'F'
        // folat n1 = 12.0; //默认类型为double,所以赋值给float类型,会有一个类型错误提示
        float n2 = 13.0f;
        double n3 = 13.0;
        double n4 = 13.0f;

        // 十进制数表示方式 0.25 0.25f .25(必须要有小数点。)
        double n5 = .25;
        System.out.println(n5);

        /*
         * 浮点型 陷阱,浮点数之间的比较。
         *
         * 在进行浮点型计算过程中会产生一个近似值的。从而导致判断失败。 所以在对小小数进行相等判断时,需要注意。 正确的做法是通过Math.abs
         * 将两个数相减的结果转换绝对值,让其小于一个范围之类达到近似相等。
         * 如果对变量进行直接赋值或者通过直接查询得到的值,是可以判断相等的。
         */
        double n6 = 2.7;
        double n7 = 8.1 / 3;
        System.out.println(n6);
        System.out.println(n7);
        if (n6 == n7) {
            System.out.println("相等");
        } else {
            System.out.println("不相等");
        }
        // 正确写法
        if (Math.abs(n6 - n7) < 0.00001) {
            System.out.println("相等");
        } else {
            System.out.println("不相等");
        }
    }
}

字符型

1. 字符常量需要用 '' 包裹。
2. 利用转义字符 "\" 将字符变成特殊格式的字符型常量。
3. char 本质上是一个整数,在输出时,是ASCII码对应的字符。
4. 可以将ASCII码进行强制类型转换,进行计算。

本质

字符是如何存储到计算机当中的?
将字符对应的码值找出,再进行存储。
存储: 'a' → 码值97 → 二进制 → 存储
读取: 二进制 → 码值97 → 'a' → 显示
字符和码之间的关系通过字符编码表决定(字符编码表事先规定好的)。

拓展

ASCII: 一个字节表示,一个128个字符。
Unicode:固定大小编码,一个字符表示两个字节,字母和汉字统一占用两个字节。
UTF-8: 大小可变的编码,字母使用一个字节,汉字使用三个字节。
GBK: 可表示汉字,范围广,字母使用一个字节,汉字使用两个字节。
GB2312: 可表示汉字,GB2312 < GBK

布尔型

1. 仅允许取值true 或 false。
2. boolean 类型 占用1个字节。
3. boolean 类型适合用于逻辑判断,一般用于流程控制。

基本数据类型的转换

1. Java程序程序中进行赋值或运算时,精度小的类型可以自动转换成精度高的数据类型。

2. byte 和 short 不能够与 char 进行转换。
3. byte、short、char 进行运算时,将精度直接提升为int类型。
4. boolean 不参与类型转换。
5. 自动提升原则: 表达式结果的类型自动提升为操作数中最大的类型。
6. 强制转换可能会造成精度丢失,数据溢出。

public class JavaNote002 {
    public static void main(String[] args) {
        /*
         * 细节一:多种类型混合运算时,
         * 系统首先自动将数据类型转换成容量最大得数据类型,然后再进行计算
         */
        int n1 = 10;
        float n2 = 10 + 1.1f;
        System.out.println(n2);

        /*
         * 反之将精度大的数据类型赋值给精度小的数据类型,就会报错。
         * int n4 = 12.1;   错误示例 将数据double 类型转换为 int类型。
         * 规则:(byte,short) 和 char 之间不能够进行类型转换。
         * 一个具体的值赋值给byte时,  先判断值是否存在byte类型范围之内,如果是即可以赋值成功。
         */
        byte n3 = 10;

        /*
         * 错误示例
         * n4为整型其精度已经超过byte,再赋值与byte,即为错误做法。
         * int n4 = 20;
         * n3 = n4;
         * char c1 = n3;    错误示例,byte不能赋值与char。
         *
         * byte short char 进行运算直接将精度提升int
         *
         */
        byte b1 = 20;
        byte b2 = 30;

        // byte b3 = b1 + b2;   错误。 原因:
        // byte、short、char 进行计算直接将精度提升为int类型。所以最终不能赋值给byte类型的值

        short s1 = 10;
        char c2 = 56;
    }
}

基本类型与String类型的转换

1. 基本类型转 String类型(将基本数据类型 + "" 即可 )
2. 将字符串变成字符而不是数字时,编译并不会提示报错,但是在运行是会抛出数字格式异常。

public class JavaNote002 {
    public static void main(String[] args) {
        //String 字符串,引用数据类型
        String s1 = "123";

        //使用基本数据类型包装类的对应方法,将String转换成对应类型。
        int num1 = Integer.parseInt(s1);
        long num2 = Long.parseLong(s1);
        float num3 = Float.parseFloat(s1);
        double num4 = Double.parseDouble(s1);

        System.out.println(num1);
        System.out.println(num2);
        System.out.println(num3);
        System.out.println(num4);

        //如何将字符串 转换成字符,将字符串第一个字符得到。
        System.out.println(s1.charAt(0));
    }
}
按讚

發佈留言

電子郵件地址不會被公開。必填項已用 * 標註