• 再回首 Java核心技术 2 —— Java数据类型


            时光飞逝,蓦然回首,Java 基础 似乎我都快记不起来了,希望这次能温故而知新,或是一些感动,或是一些惊喜,或重拾年轻时候的回忆。

            在 JVM 中,数据分为两大类:primitive types (原生类型)和 reference types(引用类型)。

    Java 的 8种基本数据类型:

           在Java中,一共有8种基本类型 英文 : primitive type  ,primitive 原始的,朴实无华的,非派生的,在 计算机科学 Computer Science 中 有 “原” 的意义,所谓的 “原”, 我的理解是,这8种基础类型是非引用型的数据。

            其中,4个整数型 int,short , long ,byte ; 2个浮点型 double ,  float ,1个用来专门表示Unicode编码的字符单元的类型char,1个用于纪念布尔的真假的布尔类型。

    整型:

    Java整形
    类型存储空间取值范围
    byte1 *  byte字节    8bit位-2^7 ~ ( 2^7 -1) 
    short2 *  byte字节   16bit位-2^15 ~  (2^15-1)
    int4 * byte字节    32bit位-2^31 ~ (2^31-1)  
    long 8 * byte字节    64bit位-2^63 ~ ( 2^63 -1) 

            学过C语言的兄弟,肯定首先就注意到了,Java中没有无符号整型的概念,都是带符号的。

            1 byte字节 等于 8 bit ;正数部分专门为了0,特意的减了一个1。int 类型最常用,这个也很好记,如果中国的人口加上印度的人口肯定超过了21.5亿人,这个时候肯定就是要溢出了。如果要用一个数字来代表地球上的人口,那这个类型只能是long。byte 和 short 类型 用于特定的应用场合,如:底层的文件处理 或者 需要控制占用存储空间量的大数组。

            long类型数字在后面可以后缀一个L,大小写皆可,来指明为long整型。0x或0X代表 16进制的数;8进制有一个前缀0,010就是8。从Java7开始,0b或0B可以代表二进制,0b1001就是9,同样从Java 7 开始,为了方便阅读,你可以在数字下面加入下划线,来方便你自己阅读代码。比如 1_0000_0000这就是曾经的首富王健林的一个小目标。

    1. package com.cosyit.corejava.core1;
    2. public class Main {
    3. public static void main(String[] args) {
    4. System.out.println(0b1001); // 9
    5. System.out.println(010); // 8
    6. System.out.println(0x10); // 16
    7. System.out.println(1_0000_0000);
    8. System.out.println(21_5000_0000L);//默认表示int ,加上l就不会有溢出的编译错误。
    9. //使用Integer的静态方法把10进制的 -3 转为二进制表示。
    10. String s = Integer.toBinaryString(-3);
    11. }
    12. }

            关于二进制数字的转换,这个我在C/C++博客中写过,Go的博客中也写过,这里Java一样,也写一遍,计算机基础性的东西大家都一样的。

    1. 1.如何获取一个数的二进制表示:
    2. 有符号 int 第一位是0 则是正数,第一位是1 则为负数。
    3. 对于负数的绝对值,是符号位以外的部分取反后再加1
    4. 需求: 我们想用8bit的二进制表示-3
    5. 做法: -3,负号的首位 毋庸置疑 设置为1
    6. 现在就处理剩下7个bit
    7. 先表示3 000 0011
    8. 取反 111 1100
    9. 1 111 1101
    10. 添加上符号位 1111 1101
    11. 2.逆向过程,从一个二进制表示的负数 1111 1101 ,获取易读的表示(我觉得十进制更易读)
    12. 先看首位 是1,那么就写个负号 ,
    13. 再看剩下的7位数取反 0000010 ,这是2
    14. 再加1, 为得到绝对值为3,负号则乘以-1,我们可知其值为 -3.
    15. 精华就是:相互转换都一样的玩法,先搞定符号位,剩下位数取反加一。

    浮点型:

    类型存储空间取值范围
    float4 * byte字节  32bit位约 -3.4E38F — +3.4E38F ,有效位数6-7位
    double8 * byte字节  64bit位约-1.798E308~1.798E308 E308 ,有效位数15位

    double类型的数值精度是float类型精度的两倍,固又被称为 双精度数值类型。

    fload 大约只能表示7位十进制的数字,double 大约表示15位的十进制数据,所以绝大部分的应用程序都采用double类型,涉及金融的场景,大多数情况下,我们都会使用BigDecimal类,我们可以保证不会有精度缺失,否则公司的会计就会来找你麻烦了。

            编译器遇到小数类型,默认认为为double 类型。 fload的后缀为f | F,double数值 后缀为 d | D ,另外,比较两个浮点数是否相等,不能直接用 == 全等号。

    二进制如何表示小数

     IEE754标准 规定了 如何以二进制的方式表示十进制的数字:

     这块比较绕:有兴趣的可以去看下视频: 什么是浮点数?10分钟彻底掌握浮点数的底层原理 #安员外读书会_哔哩哔哩_bilibili

  • 相关阅读:
    k8s集群部署禅道项目
    5. Mongodb 面试题
    基于混合蛙跳优化的BP神经网络(分类应用) - 附代码
    [hive]维度模型分类:星型模型,雪花模型,星座模型|范式|数仓分层|用户纬度拉链表|维度建模
    mac下安装redis
    Cartopy绘图入门指南
    javascript编程学习笔记分享
    C++ 01背包
    GPIO相关介绍
    Linux&Ubuntu安装OpenWAF
  • 原文地址:https://blog.csdn.net/wdw18668109050/article/details/127700413