码迷,mamicode.com
首页 > 编程语言 > 详细

Java

时间:2018-09-26 00:09:29      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:方便   octal   info   false   十六   大数   类型   重写   旋转   

 
 
本系列主要是针对于基础性常用的类型, 一个系统性的简介
本文为概述
 
基础性类型简介
 
官方关于数据类型的介绍
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类型
 
 
类层次结构
技术分享图片
 
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 
 
 

Java

标签:方便   octal   info   false   十六   大数   类型   重写   旋转   

原文地址:https://www.cnblogs.com/WLCYSYS/p/9704277.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!