「Java 专栏」06-Java 中的基本数据类型

共 8014字,需浏览 17分钟

 ·

2022-11-04 09:50

你好,我是悦创。

原文首发:https://bornforthis.cn

1. 目录

  • 认识二进制
  • 数字的基本数据类型
  • 布尔和字符数据类型
  • 使用各种基本数据类型
public class BigNumber {
    public static void main(String[] args) {
        int bigNum = 9999999999;  // 会报错:java: 整数太大
        long number = 9999999999L;  // 解决方法
    }
}

从上面的代码,我们引出了几个问题:

  • long 是个什么东西?
  • L 又是什么东西?

这就是你要学习本届内容的原因!

2. 认识二进制

2.1 十进制

每一位可以是 0~9这 10 个值,到 10 进位。一百用十进制表示就是 100,十就是 10。

2.2 二进制

每一位可以是 0 和 1 这两个值,到 2 进位。一百用二进制表示就是 1100100,十就是 1010。

2.3 十六进制

每一位可以是 0~F 这15个值,到 16 进位。一百用十六进制表示就是 64,十就是 A。

2.3 bit 和 byte

Bit 意为“位”或“比特”,是计算机运算的基础,属于二进制的范畴; Byte 意为“字节”,是计算机文件大小的基本计算单位;「换算」1 Byte = 8 Bits【1B=8b】 1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB

  • 一个二进制的位叫做一个 bit。俗称小 b。宽带中的单位,都是小 b
  • 八个二进制的位,组成一个 byte,俗称大 B。硬盘等存储的单位,都是大 B
  • Byte 是计算机中基本的衡量存储的单位,计算机在对外使用时不会用小 b(bit) 作为划分存储的单位。

3. 数字的基本数据类型

3.1 整数类型

  • byte 占用 1 个 byte,值域是 -128~127
  • short 占用 2 个 byte,值域是 -32768~32767
  • int 占用 4 个 byte,值域是 -2147483648~2147483647。Java 中整数缺省是 int 类型
    • 【缺省:默认情况下,没有特殊指明类型下,Java 认为是 int】
    • 【缺省,即系统默认状态,意思与“默认”相同。】
    • 【“缺省”最初来源于计算机英文文档中的单词"default","default”有很多意思:违约、缺省、拖欠、默认,由于当时计算机方面的翻译水平不高,于是就把这个词直译成了“缺省”,其实应该取它的引申意思“默认”。后来的人们发现,无论怎么解释,缺省好像都说不通,但是由于之前的人们已经习惯了“缺省”这个用法,故依旧延续了这个用法。后来的新一辈的人们觉得说起来很拗口,就使用了"default”的引申意思,所以现在在大多数计算机技术文档或者软件里面,采用的都是意译之后的“默认”这个用法。】
  • long 占用 8 个 byte,值域是 -9223372036854774808~9223372036854774807

3.2 浮点(小数)类型

  • float 占用 4 个 byte ,有精度,值域复杂 ±340282346638528859811704183484516925440
  • double 精度是 float 的两倍,占用  8  个 byte。Java 中浮点数缺省是 double 类型。
public class FloatCalc {
    public static void main(String[] args) {
        System.out.println(1 / 3.0);  
        // 实际来说是无限循环小数,但是对 Java 来说能力有限只能显示/计算范围内的结果
        // 也可以说,计算机没有能力把这个无限循环表达出来。在它可能的存储空间里,只能保存到 0.3333333333333333
    }
}

3.3 符号位

用 byte 来举例子,一个 1 byte = 8 bit;2【二进制】 的 8 次方是 256,而有一个是符号位,所以最后是:128,也就是上面给出的范围。 参考:https://bornforthis.cn/posts/14.html

4. 布尔和字符数据类型

4.1 布尔和字符数据类型

  • boolean 占用 4 个 byte,值域是 true,false。
  • char 占用 2 个 byte,值域是所有字符(最多 65535 个)
public class BooleanAndChar {
    public static void main(String[] args) {
        System.out.println(1 < 2);  // true
        System.out.println(1 > 2);  // false

        System.out.println("ABC");
        System.out.println('A');  // 只能有一个字符
    }
}

5. 使用各种基本数据类型

  • 例程
  • L 后缀
  • 感受浮点数精度
  • 整数缺省是 int 类型,浮点数缺省是 double 类型
  • 编译错误的定位和修正

6. 代码实操

public class PrimaryTypes {
    public static void main(String[] args) {
        byte byteVar = 99;
//        byte byteVar = 128;  // 超出 byte 范围
        System.out.println(byteVar);

        short shorVar = -30000;
        System.out.println(shorVar);

        int intVar = 300000;
        System.out.println(intVar);

        long longVar = 99;

//        long bingLongVar = 9999999999;  // 缺省是 int,需要在末尾添加 L
        long bingLongVar = 9999999999L;  // 缺省是 int,需要在末尾添加 L
//        long bingLongVar = 9999999999l;  // 不推荐小 l,比如:11111111l,你能发现哪个是 1 哪个是 l 么?
        System.out.println(bingLongVar);

        float floatVar = 100.1f// 缺省是 double 需要在后面添加 f/F
//        float floatVar = 100.1; // 缺省是 double 需要在后面添加 f/F
        System.out.println(floatVar);
        /*
        * 解析:缺省是 double,也就是说浮点数会被自动识别为 double;
        * 但是你前面的变量被声明为 float 这样就和系统相冲突啦,就需要标明数字类型*/


        double doubleVar = 100.1;
        System.out.println(doubleVar);

        boolean condition = true;
        boolean fcondition = false;
        System.out.println(condition);

        char ch = 'A';
        System.out.println(ch);

        float floatVar1 = 100.1111111111f;
        System.out.println("floatVar1:>>>" + floatVar1);
        double dobleVar1 = 100.1111111111;
        System.out.println("dobleVar1:>>>" + dobleVar1);
    }
}
"C:\Program Files\Java\jdk-11.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.2\lib\idea_rt.jar=49882:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.2\bin" -Dfile.encoding=UTF-8 -classpath D:\Java_Coder\Coder06\out\production\Coder06 PrimaryTypes
99
-30000
300000
9999999999
100.1
100.1
true
A
floatVar1:>>>100.111115
dobleVar1:>>>100.1111111111

Process finished with exit code 0
import java.math.BigDecimal;

public class PrimaryTypes {
    public static void main(String[] args) {
        byte byteVar = 100;
        System.out.println(byteVar);

        short shortVar = 30000;
        System.out.println(shortVar);

        int intVar = 1000000000;
        System.out.println(intVar);

        long longVar = 80000000000L;
        System.out.println(longVar);

        float floatVar = 100.0000000666F;
        System.out.println(floatVar);

        double doubleVar = 100.0000000666;
        System.out.println(doubleVar);

        boolean booleanVar = true;
        System.out.println(booleanVar);

        char charVar = 'a';
        System.out.println(charVar);

    }
}

7. 技巧

浏览 37
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报