前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[一]基础类型概述

[一]基础类型概述

作者头像
noteless
发布2018-10-10 11:08:58
4950
发布2018-10-10 11:08:58
举报
文章被收录于专栏:notelessnoteless

本系列主要是针对于基础性常用的类型, 一个系统性的简介

本文为概述

基础性类型简介

官方关于数据类型的介绍

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-1SE8以及之后,可以用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
image_5ba982a6_2da4

Number是对"数值"这两个字的概念在Java中的抽象Byte、Short、Integer、Long、Double、Float、BigDecimal、BigInteger  类的超类

规定了作为数值的协议  就是提供xxxValue方法以获得各种不同的数据类型的值在类型转换之间可能会损失精度

除了byte和short 上图方法列表中的其他的方法   是必须提供的

共性特点

比较 11个Object类型,全部都实现了Comparable 也就意味着都可以进行比较

parseXXX  系列

字符串形式数值解析为基本类型数值   数值型的基本数据类型的包装类 也就是Byte    Short     Integer     Long     Float     Double    都有此系列方法

valueOf     系列

包装为对象类型 基本数据类型的包装类,自然可以将基本类型包装成包装类   VaueOf系列基本都有对应的缓存区 缓存区范围内的对象重复使用,对象为同一个   对于String和BigInteger 和 BigDecimal 也有用于包装的方法

decode

字符串形式数值解析后,包装成对象不需要传递基数,可以根据字符串自行判断

XXXValue  系列

基本类型值 对于Number的子类,都有作为数值需要提供的 转换为基本类型数据的方法

toUnsignedXXX 系列

无符号数相关对于Byte    Short    Integer    Long  四种整型的包装类都有无符号的形式的方法

toString  toXXXString  系列

转换为字符串形式

equals

他们都重写了equals方法比较的是实际的数据内容,而不是地址

hashCode

getXXX系列

确定具有指定名称的系统属性的各种类型的值 Integer 和 Long有此系列方法

Byte    Short    Integer    Long    Float    Double Boolean  Character   内部都有一个value 属性 为基本数据类型

XXX(基本类型)XXX(String s)

数值型包装类的构造方法多为两种:一种是直接借助于基本类型数据另一种是内部借助于ParseXXX方法进行转换为基本类型,然后在返回对象

其他方法

二进制位数相关

计算机中整数是以二进制补码形式存放的Integer和Long提供了bitCount  方法 用于获取二进制补码表示形式的 1 位的数量

数据翻转

数据为二进制表示形式,翻转就是完全的颠倒过来 ,形象点说就是旋转180度 最后一位变成了最先一位  Integer和Long提供了reverse  方法进行翻转

按照字节翻转,reverse是按照位翻转,最后一位变成最先一位 reverseBytes 是按照字节翻转,也就是最后一个字节变成了最先的一个字节

循环移位

循环移位就是循环移动位置位置就这么多,循环移动就是从一头到另一头移位负距离等同于在另一头移位

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相对应,可以互相转化的

Integer和Long  提供了这几个方法

无符号的求余取整运算

divideUnsigned(dividend, divisor)  求商,也就是取整 第一个参数除以第二个参数的商remainderUnsigned(dividend,divisor)求余  第一个参数 除以 第二个参数的余数

Integer和Long  有提供

看得出来, 作为数值型的Integer 和 Long  提供了最多的方法支持

上面列出来的方法并不是每个类都有实现,但是至少出现在一个以上的类中

为了条理清晰,所以在此列出

注意点

getXXX系列

他的本意是确定具有指定名称的系统属性的整数值 而不是把一个字符串转换为包装类,所以一定不要想当然的把它当做解析 比如 getLong 他首先会System.getProperty  如果你传递的字符串根本就不是一个系统属性的名称,则根本就不会进行下去 而且,第二个值也不是基数,也就是我们说的进制,他是如果前面为null的话,给出的默认值

测试一下

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 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档