三、Java之基本数据类型

 

一、变量

1.1 变量的概念

变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)

1.2 变量的使用

1.2.1 声明变量

int a;

1.2.2 变量赋值

a = 60; // 把 60 赋给 a

1.2.3 使用变量

public class HelloWorld {
    public static void main(String[] args) {
        int a;
        a = 2;
        System.out.println("a = " + a);  // a = 2
        int b = 3;
        System.out.println("b = " + b);  // b = 3
    }
}
public class Var01 {
    public static void main(String[] args) {
        int age = 29;
        double score = 99.5;
        char gender = '男';
        String name = "王勇";
        System.out.println(name);
        System.out.println(gender);
        System.out.println(age);
        System.out.println(score);
    }
}

1.3 变量使用的注意事项

1. 变量表示内存中的一个存储区域(不同的变量,类型不同,占用的空间大小不同。比如: int 4个字节, double 8个字节), 该区域有自己的名称(变量名)和类型(数据类型)
2. 变量必须先声明,后使用
3. 该区域的数据(值)可以在同一类型范围内不断变化
4. 变量在同一个作用于不能重名
5.变量 = 变量名 + 值 + 数据类型,这就是变量的三要素

二、 + 的使用

public class Var01 {
    public static void main(String[] args) {
        System.out.println(100 + 200); // 300
        System.out.println("100" + 200);//100200
        System.out.println(100 + "200");//100200
        System.out.println(100 + 200 + "300");//300300
        System.out.println("100" + 200 + 300);//100200300
    }
}

1. 当左右两边都是数值型时,则做加法运算
2. 当左右两边有一方是字符串时,做字符串拼接运算
3. 运算顺序,从左往右

三、基本数据类型

 

1. java 数据类型分为两大类 基本数据类型, 引用类型
2. 基本数据类型有8种数值型:(byte , short , int , long , float ,double), 字符型:char, 布尔型:boolean
3. 引用类型(类, 接口, 数组)

3.1 整数类型(byte, short, int, long)

3.1.1 基本介绍

Java 的整数类型就是用于存放整数值的,比如 12 , 30, 3456 等等

3.1.2 整数的定义与使用

byte n1 = 10;
short n2 = 10;
int n3 = 10;//4 个字节
long n4 = 10L; //8 个字节

3.1.3 整数所使用的范围

3.1.4 整型的使用细节

1. Java各整数类型有固定的范围和字段长度,不受具体OS的影响,以保证java的可移植性。
2. Java的整型常量(具体指)默认为int类型,声明long型常量需要加 "l" 或者 "L"
3. Java程序中变量常声明为int类型,除非不足以表示大数, 才使用long
4. bit: 计算机的最小存储单位, byte: 计算机的基本存储单元 1byte = 8bit

public class Var02 {
    public static void main(String[] args) {
        int a = 4;
        // int b = 8L;  // 错误
        long c = 8;
        long d = 8L;
        System.out.println("a = " + a + " c = " + c + " d = " + d);  // a = 4 c = 8 d = 8
    }
}

3.2 浮点类型(float, double)

3.2.1 基本介绍

Java 的浮点类型可以表示一个小数,比如 123.4 ,7.8 ,0.12 等等

3.2.2 浮点型的分类

 

float f = 3.14f;
double d = 5.12;

3.2.3 浮点型的使用说明

1. 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
2. 尾数部分可能丢失,造成精度损失(小数都是近似值)。
3. 具体的存储原理可以参考: https://www.cnblogs.com/wangyong123/articles/13997795.html#_label0

3.2.4 浮点型的使用细节

1. 与整数类型类似, Java复现类型也有固定的范围和字段长度, 不受具体的OS的影响。float是4个字节,double是8个字节
2. Java的浮点型常量默认为double类型,声明float类型常量,需要在后面加上"f"或者"F"
3. 浮点型常量的两种表示方法
  1): 十进制数形式: 5.12 512.0f .512(必须有小数点)
  2): 科学计数法形式: 5.12e2(5.12*10^2) 5.12E-2(5.12*10^-2)
4. 通常情况下, 使用double类型,因为比flaot更加精确
  double num = 2.1223456576
5. 注意浮点数精度陷阱

public class FloatDouble {
    public static void main(String[] args) {
        // 1. Java浮点型默认是 double型
        // float num1 = 1.1;  错误
        float num2 = 1.1F;
        double num3 = 1.1;
        double num4 = 1.1F;  // 可以

        //  2. 十进制数形式与科学技术法形式
        double num5 = .123;  // = 0.123
        System.out.println(num5);  // 0.123
        System.out.println(5.12E2); // 512.0
        System.out.println(5.12E-2); // 0.0512

        // 3. 通常情况下,使用double类型
        double num6 = 2.1234567851;
        float num7 = 2.1234567851F;
        System.out.println(num6); // 2.123456785
        System.out.println(num7); // 2.1234567

        // 4. 浮点数的陷阱
        double num8 = 2.7;
        double num9 = 8.1 / 3;
        System.out.println(num8); // 2.7
        System.out.println(num9); // 2.6999999999999997  接近 2.7 的一个小数,而不是 2.7
        //得到一个重要的使用点: 当我们对运算结果是小数的进行相等判断是,要小心
        //应该是以两个数的差值的绝对值,在某个精度范围类判断
        if (num8 == num9) {
            System.out.println("num8 == num9 相等"); // 不会打印出来的
        }
        // 正确的写法
        if (Math.abs(num8 - num9) < 0.000001) {
            System.out.println("差值非常小, 认为相等..."); // 差值非常小, 认为相等...
        }
    }
}

3.3 字符类型(char)

3.3.1 基本介绍

字符类型可以表示单个字符,字符类型是 char,char 是两个字节(可以存放汉字)。

3.3.2 字符型的定义与使用

char c1 = 'a';
char c2 = '\t';
char c3 = '韩';
char c4 = 97;

3.3.3 字符型的使用细节

1. 字符常量是用单引号' ' 括起来的字符。
2. Java中国还有许使用'\'来将气候的字符转变为特殊字符型常量.
3. 在Java中,char本质上是一个整数,在输出时,采用unicode编码对应的字符
4. 可以直接给char赋值一个整数,然后输出时,会按照对应的unicode字符输出。如 97 -- a;
5. char类型是可以进行运算的,相当于一个整数,因为它都对应的unicode码

public class CharVar {
    public static void main(String[] args) {
        // 在java中,char本质上是一个数字,采用unicode编码
        char c1 = 97;
        System.out.println(c1); // a
        char c2 = 'a';  // 输出a对应的数字
        System.out.println((int)c2); // 97
        char c3 = '王';
        System.out.println((int)c3); // 29578
        char c4 = 29578;
        System.out.println(c4);  //// char 类型是可以参与数字运算的, 因为它都对应有 Unicode 码.
        System.out.println('a' + 10); // 107

        char c5 = 'a' + 20;
        System.out.println(c5); // u
        System.out.println((int)c5); // 117
    }
} 

1. 字符型存储到计算机中,需要将字符对应的码值(整数)找出来, 比如 'a' 存储: 'a'==>码值97==》二进制(1100001)==>存储
2. 字符和码值的对应关系是通过字符编码实现的

3.3.4 字符编码简介

ASCII: 一个字节表示,一共128个字符,实际上一个字节可以表示256个字符,只使用了128个。缺点是不能表示所有字符。

Unicode: 固定大小的编码,使用两个字节来表示字符,字母和汉字统一都是占用两个字节,将世界上所有的符号都纳入其中,每个字符都给予一个独一无二的编码,使用Unicode编码没有乱码的问题,缺点是一个英文和汉字都占用两个字节,比较浪费空间。2^16==65536,所以最多编码65535个字符, 0-127的字符和ASCII编码是一样的,因此Unicode编码兼容ASCII码。

UTF-8:UTF-8是在互联网上使用最广的一种Unicode的改进的实现方式,UTF-8是一种边长的编码方式,它可以使用1-6个字节表示符号,根据不同的符号二牛鞭花字节长度,使用1个字节表示字母,3个字节表示汉字。

3.4 布尔类型(boolean)

3.4.1 基本介绍

1. boolean类型数据只允许取值true或者flase,没有null的存在。
2. boolean类型占 1 个字节
3. boolean类型适用于逻辑运算,一般用于流程控制中使用。

3.4.2 布尔类型的使用

public class BooleanVar {
    public static void main(String[] args) {
        boolean isPass = true;
        if (isPass) {
            System.out.println("正确"); // 正确
        } else {
            System.out.println("错误");
        }
    }
}

四、基本数据类型转换

4.1 自动数据类型转换

4.1.1 自动数据额类型转换原则

Java程序进行赋值或者运算时, 精度小的类型自动转换成精度大的类型,称为自动类型转换。

4.1.2 自动数据类型转换使用细节

1. 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
2. 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。
3. (byte,short)和char之间不会互相自动转换
4. byte, short, char 他们三种可以计算,在计算时首先转成int类型。
5. 自动提升原则: 表达式结果的类型自动提升位操作数中最大的类型
6. boolean不参与转换

public class AutoConvert {
    public static void main(String[] args) {
        // 1. 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
        int n1 = 10; 
        // float d1 = n1 + 1.1; // 错误 n1+1.1是double类型
        double d1 = n1 + 3.1;
        float d2 = n1 + 3.1F;

        // 2. 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。
        // int n2 = 1.1; // 错误, double -> int

        // 3. (byte,short)和char之间不会互相自动转换
        // 当把整数赋给byte, 先判断该数是否在byte范围内,如果在就可以
        byte b1 = 10;
        int n2 = 10;
        // byte b2 = n2; 错误, 因为 n2是int,如果是变量赋值,先判断类型,在判断范围 
        // char c1 = b1; 错误, byte不嫩改自动转换成char
        
        // 4. byte, short, char 他们三种可以计算,在计算时首先转成int类型。
        byte b2 = 1;
        byte b3 = 2;
        short s1 = 1;
        // short s2 = b2 + s1; 错误, b2 + s1 => int
        int s2 = b2 + s1;
        // byte b4 = b2 + b3; 错误, b2 + b3 => int

        // 5. 自动提升原则: 表达式结果的类型自动提升位操作数中最大的类型
        byte b4 = 1;
        short s3 = 100;
        int num1 = 1;
        float num2 = 1.1F;
        double num = b4 + s3 + num1 + num2;

        // 6. boolean不参与转换
        boolean pass = true;
        // int num = pass;  错误, 不嫩改进型类型转换

    }    
}

4.2 强制数据类型转换

4.2.1 强制数据类型转换说明

在使用时要加上强制转换符 (type), 因此可能会造成精度的降低或者溢出, 要格外注意

public class ForceConvert {
    public static void main(String[] args) {
        int i = (int)1.9;
        System.out.println("i = " + i); // i = 1  精度损失

        int j = 1000;
        byte b = (byte)j;
        System.out.println("b = " + b); // b = -24 随机数
    }
}

4.2.2 强制类型转换使用细节

1. 当使用的数据从 大 ---> 小, 可以使用强制类型转换
2. 强转符号只会针对最近的操作数有效,所以一般使用()来提升优先级。
3. char类型可以保存int类型的常量值,但不能保存int类型的变量值, 需要强转。
4. byte,short,char类型进行运算时,当做int类型来处理。

public class ForceConvert {
    public static void main(String[] args) {
        // 1.强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
        // int x = (int)10 * 3.5 + 6 * 1.5; 错误, double --> int
        int x = (int)(10 * 3.5 + 6 * 1.5);
        System.out.println(x); // 44

        // 2. char类型可以保存int类型的常量值,但不能保存int类型的变量值, 需要强转。
        char c1 = 100;
        int m = 100;
        // char c2 = m;  错误
        char c3 = (char)m;
        System.out.println(c3); // d, 100对应的字符
    }    
}

4.3 数据类型转换练习

// 判断下面是否能够编译通过,不能通过说明理由

short s = 12;
// s = s - 9;  int -> short

byte b = 10;
// b = b + 11;  int -> byte
b = (byte)(b + 11);

char c = 'a';
int i = 16;
fload d = .314;
double result = c + 1 + d;

byte e = 16;
short f = 14;
// short t = s + b; int -> short

4.4 基本数据类型与String类型的转换

4.4.1 基本数据类型转换成String类型

基本数据类型转String类型直接加上 ""

public class BasicToString {
    public static void main(String[] args) {
        int n1 = 100;
        float n2 = 1.1F;
        double n3 = 3.14;
        boolean b1 = true;
        String str1 = n1 + "";
        String str2 = n2 + "";
        String str3 = b1 + "";
        System.out.println(str1 + " " + str2 + " " + str3); // 100 1.1 true
    }
}

4.4.2 String类型转换成基本数据类型

通过基本类型的包装类来调用 parseXX方法

public class StringToBasic {
    public static void main(String[] args) {
        String s = "123";
        int num1 = Integer.parseInt(s);
        double num2 = Double.parseDouble(s);
        float num3 = Float.parseFloat(s);
        long num4 = Long.parseLong(s);
        byte num5 = Byte.parseByte(s);
        short num6 = Short.parseShort(s);
        boolean b = Boolean.parseBoolean("true");

        System.out.println(num1);//123
        System.out.println(num2);//123.0
        System.out.println(num3);//123.0
        System.out.println(num4);//123
        System.out.println(num5);//123
        System.out.println(num6);//123
        System.out.println(b);//true

        // 字符串转换成字符char, 只能得到某一个字符
        System.out.println(s.charAt(0)); // 1
        System.out.println(s.charAt(1)); // 2
        System.out.println(s.charAt(2)); // 3
    }
}

4.4.3 注意事项

在将 String 类型转成 基本数据类型时, ,比如 我们可以把 "123" , 转成一个整数,但是不能把 "hello" 转成一个整数, 如果格式不正确,就会抛出异常,程序就会终止,

五、键盘输入语句

5.1 介绍

Input.java , 需要一个 扫描器(对象), 就是Scanner

1. 导入该类的所在包, java.util.*
2. 创建该类对象(声明变量)
3. 调用里面的功能

5.2 键盘输入语句

import java.util.Scanner; // 1. 导入 Scanner类所在包, 表示简单文本扫描器

public class Input {
    public static void main(String[] args) {
        // 2. 创建 Scanner 对象
        Scanner scanner = new Scanner(System.in);
        // 3. 接收用户的输入
        System.out.println("请输入名字");
        String name = scanner.next(); // 接收用户输入字符串
        System.out.println("请输入年龄");
        int age = scanner.nextInt(); // 接收用户的输入的int
        System.out.println("请输入薪水");
        double salary = scanner.nextDouble(); // 接收用户的输入的double
        System.out.println("人的信息如下:");
        System.out.println("name = " + name + " age = " + age + " salary = " + salary);
    }
}

 

posted on 2023-11-20 18:09  软饭攻城狮  阅读(5)  评论(0编辑  收藏  举报

导航