跳至主要內容

06-Java 中的基本数据类型

AI悦创原创Java体系课Java体系课大约 9 分钟...约 2563 字

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.htmlopen in new window

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);
    }
}

7. 技巧

  • IDE 快速输入:System._out_.println("");输入:sout

8. 学员提问

Q1

为什么 byte 和 short 后面不用加字母呢?我的理解是下面的,不知道对不对。 数字的默认类型是 int, byte 被包含在 int 里面吗?所以 long 的值在被包含在 int 的值中时可以不加 L,但是超出必须要加的。 long 的值在 int 类型中时,也是占用 8bit 的内存吗? java 编译器会对这种类型有优化吗?


作者回复:

为什么 byte 和 short 后面不用加字母呢? 是的, 编译器可以检查 byte 和 short 的值阈, 如果超出会报错。比如 byte b = 999; 这个更多的是 Java 编译器从易用性做的一种简化。如果每次给 byte 和 short 赋值,都要标明一下类型,会很繁琐。
后面的问题... 其实不存在 long 的值包含在 int 里面, 比如 long abc = 999; 这个过程其实是一种 Java的自动类型转换,低精度的数字可以赋值给高精度的数字。这部分内容在"基本数据类型的更多语法点"有讲述.

欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!

公众号:AI悦创【二维码】

AI悦创·编程一对一

AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh

C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh

方法一:QQopen in new window

方法二:微信:Jiabcdefh

上次编辑于:
贡献者: AI悦创,AndersonHJB
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度