zoukankan      html  css  js  c++  java
  • Java

    [一]基础类型概述

     
     
    本系列主要是针对于基础性常用的类型, 一个系统性的简介
    本文为概述
     
    基础性类型简介
     
    官方关于数据类型的介绍
    https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
    java中的8种基本数据类型
    每种数据类型还有他对应的包装类
    名称 字节 取值范围 默认值
    byte 1个字节 -128 ~127 0
    short  2个字节 -32,768 ~ 32,767 0
    int  4个字节 -231 ~ 231-1
    SE8以及之后,可以用int来表示无符号32位数
    0~232-1
    0
    long  8个字节 -263 ~ 263-1
    SE8以及之后,可以用long来表示无符号64位数
    0~264-1
    0L
    float  4个字节 单精度 32-bit IEEE 754 浮点数 0.0f
    double  8个字节 双精度 64-bit IEEE 754 浮点数 0.0d
    char  2个字节 16位 Unicode 字符
    'u0000' (or 0)      ~   'uffff' (65,535 包括)
    'u0000'
    boolean 字节大小并未规定,由实现决定
    虚拟机内部没有支持boolean的指令 
    boolean编译之后使用虚拟机中的int代替
    oracle公司的虚拟机实现中boolean数组编码为byte数组
    那就是一个boolean 一个字节 8位
    true 或者 false false
     
    另外为了方便还提供了 java.lang.String,他是不可变的,也不属于基本数据类型,默认值为  null
     
    为了支持大数据的计算,还提供了BigInteger 和 BigDecimal
     
     
    所以说常用到的,基础性的数据类型有:
    8种基本数据类型
    byte    short      int         long     float     double     char           boolean
    8种基本数据类型对应的包装类
    Byte    Short     Integer     Long     Float     Double     Character    Boolean
    java.lang.String 
    java.math.BigInteger   和  java.math.BigDecimal
    8个基本类型
    11个Object类型
     
     
    类层次结构
    image_5ba982a6_2da4
     
    Number是对"数值"这两个字的概念在Java中的抽象
    Byte、Short、Integer、Long、Double、Float、BigDecimal、BigInteger  类的超类
    规定了作为数值的协议  就是提供xxxValue方法以获得各种不同的数据类型的值
    在类型转换之间可能会损失精度 
    image_5ba982a6_7e1a
    除了byte和short 
    上图方法列表中的其他的方法   是必须提供的
    image_5ba982a6_5b88
     
     
    共性特点
     
    image_5ba982a6_14bb
    比较
    11个Object类型,全部都实现了Comparable
    也就意味着都可以进行比较
    parseXXX  系列
    字符串形式数值解析为基本类型数值
     
    数值型的基本数据类型的包装类
    也就是Byte    Short     Integer     Long     Float     Double    都有此系列方法  
    image_5ba982a6_2bcb
    valueOf     系列
    包装为对象类型
    基本数据类型的包装类,自然可以将基本类型包装成包装类
     
    VaueOf系列基本都有对应的缓存区
    缓存区范围内的对象重复使用,对象为同一个
     
    对于String和BigInteger 和 BigDecimal 也有用于包装的方法
    image_5ba982a6_13d2
    decode 字符串形式数值解析后,包装成对象
    不需要传递基数,可以根据字符串自行判断
    image_5ba982a6_65c5


    XXXValue  系列
    基本类型值
    对于Number的子类,都有作为数值需要提供的
    转换为基本类型数据的方法
    image_5ba982a6_5ccb
    toUnsignedXXX 系列 无符号数相关
    对于Byte    Short    Integer    Long  四种整型的包装类
    都有无符号的形式的方法       

    toString  toXXXString  系列 转换为字符串形式
    equals 他们都重写了equals方法
    比较的是实际的数据内容,而不是地址
    hashCode   
    getXXX系列
    确定具有指定名称的系统属性的各种类型的值
    Integer 和 Long有此系列方法
    image_5ba982a6_504e
    Byte    Short    Integer    Long    Float    Double
    Boolean  Character
     
    内部都有一个value 属性
    为基本数据类型
    XXX(基本类型)
    XXX(String s)
    数值型包装类的构造方法多为两种:
    一种是直接借助于基本类型数据
    另一种是内部借助于ParseXXX方法进行转换为基本类型,然后在返回对象
     
    其他方法

    二进制位数相关

    计算机中整数是以二进制补码形式存放的
    Integer和Long提供了bitCount  方法 用于获取二进制补码表示形式的 1 位的数量
     
    数据翻转
    数据为二进制表示形式,翻转就是完全的颠倒过来 ,形象点说就是旋转180度
    最后一位变成了最先一位 
    Integer和Long提供了reverse  方法进行翻转
    按照字节翻转,reverse是按照位翻转,最后一位变成最先一位
    reverseBytes 是按照字节翻转,也就是最后一个字节变成了最先的一个字节
     
    循环移位
    循环移位就是循环移动位置
    位置就这么多,循环移动就是从一头到另一头
    移位负距离等同于在另一头移位
    image_5ba982a6_4e72
    rotateLeft
    循环左移 对应上面一个图,从最左边(最高位)移出,从右边最低位在进入
    rotateRight
    循环右移 对应下面一个图,从最右边(最低位)移出,从左边最高位在进入
    Integer和Long提供了循环右移和循环左移
     
    最高1 位 和 最低 1位
    前导零 后置零
    这几个方法只需要知道用法含义,实现的逻辑背后都是有理论依据的
    数据都是二进制形式
    左边为高位  右边为低位
    从最左边也就是最高位  往右边挨个位查找,只要找到了这个 1  所有的其他位都置零  得到的这个数就是最高1 位的数值
    从最右边也就是最低位  往左边挨个位查找,只要找到了这个 1  所有的其他位都置零  得到的这个数就是最低1 位的数值
    highestOneBit表示从最左边查找第一个1,那么第一个1 左边,肯定全部都是0
    这些0 就是numberOfLeadingZeros
    看得出来,   highestOneBit与numberOfLeadingZeros相对应,可以互相转化的

    同理lowestOneBit 表示最右边查找第一个1 那么第一个1 右边,肯定全部都是0
    这些0就是numberOfTrailingZeros
    看得出来, lowestOneBit 与 numberOfTrailingZeros相对应,可以互相转化的
    image_5ba982a7_6fff
    Integer和Long  提供了这几个方法
     
    无符号的求余取整运算
    divideUnsigned(dividend, divisor)  求商,也就是取整 第一个参数除以第二个参数的商
    remainderUnsigned(dividend,divisor)求余  第一个参数 除以 第二个参数的余数
    Integer和Long  有提供
     
    看得出来, 作为数值型的Integer 和 Long  提供了最多的方法支持
    上面列出来的方法并不是每个类都有实现,但是至少出现在一个以上的类中
    为了条理清晰,所以在此列出
     
     
    注意点
     
    getXXX系列
    他的本意是确定具有指定名称的系统属性的整数值
    而不是把一个字符串转换为包装类,所以一定不要想当然的把它当做解析
    比如 getLong
    他首先会System.getProperty 
    如果你传递的字符串根本就不是一个系统属性的名称,则根本就不会进行下去
    而且,第二个值也不是基数,也就是我们说的进制,他是如果前面为null的话,给出的默认值
    image_5ba982a7_4830
    测试一下
    image_5ba982a7_648f
     
     
     
    decode
    接受通过以下语法给出的十进制、十六进制和八进制数字
    Sign是可选的
    Sign DecimalNumeral
    Sign 0x HexDigits
    Sign 0X HexDigits
    Sign # HexDigits
    Sign 0 OctalDigits
    Sign:
    -
    decode 用于将字符串解码为包装类对象
    不依赖于对象,所以是静态方法
    valueOf也可以将字符串或者基本类型包装为对象
    decode 不需要指定进制,可以识别前缀符号 0x  0X # 0
    valueOf则不可以识别前缀,要么指定基数,要么就是默认十进制,而且他的参数只能是指定基础的有效字符,不能有前缀符号
     
     
    valueOf 与 new 对象
    valueOf系列方法内部都有缓存,所以除非必须要创建对象,尽量使用valueOf 
    会对范围内的数进行缓存,不在范围内的将会new 
     
     
  • 相关阅读:
    windows命令行下导入excel数据到SQLite数据库
    Android Studio如何提示函数用法
    在不root手机的情况上读取Data目录上的文件
    OSI七层模型
    设计模式之代理模式
    Android中Javascript中的调用
    cf #205 B Codeforces Round #205 (Div. 2) B. Two Heaps
    uva 10600 次小生成树
    防2B && 图论模板 && 7788
    最大匹配 && 最佳完美匹配 模板
  • 原文地址:https://www.cnblogs.com/WLCYSYS/p/9704277.html
Copyright © 2011-2022 走看看