java定义一个short_JDK源码解读第七章:java.lang.Short
Short
1.Short声明
public final class Long extends Number implements Comparable {}
复制代码
可以看到Short类继承了Number类,而又不是抽象类,自然要重写Number类中的xxxValue方法。另外Short类实现了Comparable接口,Comparable是一个接口,该接口定义类的自然顺序,实现该接口的类就可以按这种方式排序,一般情况下如果某类对象自身具有比较的特性就可以实现该接口,比如这里的Short代表的是一种数,而数本身就具有比较的特性,就可以实现该接口。
2.Short边界值
public static final short MIN_VALUE = -32768;
public static final short MAX_VALUE = 32767;
复制代码
最大值和最小值为什么是这么多,和上章Byte是一样的,只是short为16个字节,占位2位,最大值的补码为0111111111111111,转换为10进制就为32767,最小值补码为1000000000000000,十进制值为32768。
3.Short其他方法
//基本类型 short 的 Class 实例,即short.class
public static final Class TYPE = (Class) Class.getPrimitiveClass("short");
//将short类型的数转换为其10进制对应的数的字符串形式
public static String toString(short s) {
return Integer.toString((int)s, 10);
}
//将short类型的数转换为其指定进制对应的数的字符串形式
public static short parseShort(String s, int radix)
throws NumberFormatException {
int i = Integer.parseInt(s, radix);
if (i < MIN_VALUE || i > MAX_VALUE)
throw new NumberFormatException(
"Value out of range. Value:\"" + s + "\" Radix:" + radix);
return (short)i;
}
//将10进制的字符串数转换为对应的short类型的数字
public static short parseShort(String s) throws NumberFormatException {
return parseShort(s, 10);
}
//将指定进制的字符串数转换为对应的short类型的数字
public static Short valueOf(String s, int radix)
throws NumberFormatException {
return valueOf(parseShort(s, radix));
}
//获取字符串形式的数字,所对应的Short对象
public static Short valueOf(String s) throws NumberFormatException {
return valueOf(s, 10);
}
//Short对象的缓冲类
private static class ShortCache {
private ShortCache(){}
//缓冲数组
static final Short cache[] = new Short[-(-128) + 127 + 1];
//创建缓冲对象,共256个
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Short((short)(i - 128));
}
}
//从缓冲对象中获取对应的Short对象
//可以看到在-127到128之间是从缓存数组中取的,如果所有范围数值都放在内存中其实比较消耗资源,所以和Byte一样只存放了256个数值。
public static Short valueOf(short s) {
final int offset = 128;
int sAsInt = s;
if (sAsInt >= -128 && sAsInt <= 127) { // must cache
return ShortCache.cache[sAsInt + offset];
}
return new Short(s);
}
//将其它进制表示法,表示的字符串数据转换为10进制表示的short数据,然后返回对应的Short对象
public static Short decode(String nm) throws NumberFormatException {
int i = Integer.decode(nm);
if (i < MIN_VALUE || i > MAX_VALUE)
throw new NumberFormatException(
"Value " + i + " out of range from input " + nm);
return valueOf((short)i);
}
//用于存储short数值
private final short value;
//Short类的构造器,参数为short值
public Short(short value) {
this.value = value;
}
//Short类的构造器,参数为字符串
public Short(String s) throws NumberFormatException {
this.value = parseShort(s, 10);
}
//将short数转换为byte,由于short长度大于byte所以这里可以会出现溢出的情况
public byte byteValue() {
return (byte)value;
}
//返回short数据
public short shortValue() {
return value;
}
//将short数转换为int类型
public int intValue() {
return (int)value;
}
//将short数转换为long类型
public long longValue() {
return (long)value;
}
//将short数转换为float类型
public float floatValue() {
return (float)value;
}
//将short数转换为double类型
public double doubleValue() {
return (double)value;
}
//toString方法
public String toString() {
return Integer.toString((int)value);
}
public int hashCode() {
return Short.hashCode(value);
}
public static int hashCode(short value) {
return (int)value;
}
public boolean equals(Object obj) {
if (obj instanceof Short) {
return value == ((Short)obj).shortValue();
}
return false;
}
//比较两个short对象的大小
public int compareTo(Short anotherShort) {
return compare(this.value, anotherShort.value);
}
public static int compare(short x, short y) {
return x - y;
}
//short类型所占的位数
public static final int SIZE = 16;
//short类型所占的字节数
public static final int BYTES = SIZE / Byte.SIZE;
//short的高8位与低8位互换
public static short reverseBytes(short i) {
return (short) (((i & 0xFF00) >> 8) | (i << 8));
}
//将short类型的数转换为无符号的int类型
public static int toUnsignedInt(short x) {
return ((int) x) & 0xffff;
}
//将short类型的数转换为无符号的long类型
public static long toUnsignedLong(short x) {
return ((long) x) & 0xffffL;
}
}
复制代码
上述大部分方法源码其实和Byte的是一样的,不需要过多的说明,看看Byte的源码就清楚了。这里不在一一说明。
4.reverseBytes(short i)
public static short reverseBytes(short i) {
return (short) (((i & 0xFF00) >> 8) | (i << 8));
}
复制代码
这个方法在Byte中是不存在的,作用是将short类型的低8位与高8位互换的。
1.将目标数i与0xFF00(转换为2进制是 1111 1111 0000 0000)做&的运算,得到的结果为i的高8位不变,低8位全变为0,然后右移8位,就得到了目标数i的高8位
2.将i左移8位,得到的数为一个新数,这个新数的高8位为原目标数i的低8位,这个数的低8位为0
3.将i的高8位与这个新数做|运算,得到的结果就是将目标数i的高8位,与低8位互换的数。
比如一个数的二进制为1100 0011 0101 1010
1的运算结果 0000 0000 1100 0011
2的运算结果 0101 1010 0000 0000
3的最终结果 0101 1010 1100 0011
java定义一个short_JDK源码解读第七章:java.lang.Short相关推荐
- Java Review - LinkedHashMap LinkedHashSet 源码解读
文章目录 Pre 概述 数据结构 类继承关系 构造函数 方法 get() put() remove() LinkedHashSet 使用案例 - FIFO策略缓存 Pre Java Review - ...
- Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager)
Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager) 本篇主要讲解iOS开发中的网络监控 前言 在开发中,有时候我们需要获取这些信息: 手机是否联网 ...
- Java Review - HashMap HashSet 源码解读
文章目录 概述 HashMap结构图 构造函数 重点方法源码解读 (1.7) put() get() remove() 1.8版本 HashMap put resize() 扩容 get HashSe ...
- Spring 源码解读第七弹!bean 标签的解析
Spring 源码解读继续. 本文是 Spring 系列第八篇,如果小伙伴们还没阅读过本系列前面的文章,建议先看看,这有助于更好的理解本文. Spring 源码解读计划 Spring 源码第一篇开整! ...
- Java经典面试:源码解读及如何保证线程安全
一面 正式批(别看了都是正式批,提前批就没让我面!)一面.面试时间 08-18,19:53 - 21:08,全程1个小时15分钟.涉及内容:项目.网络.数据库.算法题 1. 自我介绍 2. 项目中的有 ...
- java定义一个eat方法_小黄鸭系列java基础知识 | java中的方法
前言 今天我们要探讨的问题,是java基础语法的最后一个问题,也就是java中的方法,今天主要从以下几个方面来介绍: 方法是什么(定义) 方法的分类 方法的调用 应该说,学完今天的知识,你至少应该看懂 ...
- java文件 记事本_[源码和文档分享]基于JAVA的记事本
一.绪论 1.1 引言 现如今,电脑已经成为了每家每户甚至是每个人手头都必有的一种实用性工具,它改变了人们的生活,大大提高了人们的工作效率.在此基础上,电脑端的记事本应用一直是每台电脑所必备的实用性应 ...
- STL源码剖析 第七章 仿函数(函数对象)
函数对象:具有函数性质的对象 使得用户像使用函数一样使用它 一般函数提供两个版本,第一个版本使用operator < ;第二版本需要用户 指定某种操作 第二版本就是设计一个函数,将函数指针作为算 ...
- Alamofire源码解读系列(九)之响应封装(Response)
本篇主要带来Alamofire中Response的解读 前言 在每篇文章的前言部分,我都会把我认为的本篇最重要的内容提前讲一下.我更想同大家分享这些顶级框架在设计和编码层次究竟有哪些过人的地方?当然, ...
- AFNetworking 3.0 源码解读(十)之 UIActivityIndicatorView/UIRefreshControl/UIImageView + AFNetworking...
我们应该看到过很多类似这样的例子:某个控件拥有加载网络图片的能力.但这究竟是怎么做到的呢?看完这篇文章就明白了. 前言 这篇我们会介绍 AFNetworking 中的3个UIKit中的分类.UIAct ...
最新文章
- LeetCode实战:搜索旋转排序数组
- 在Windows Mobile和Wince(Windows Embedded CE)下如何使用.NET Compact Framework开发进程管理程序...
- 聊聊spring security的permitAll以及webIgnore
- java包的概念及作用
- 预警系统一键自动升级_东风风行新风行T5购车手册,首推1.5T自动尊贵型
- [Java] 蓝桥杯ADV-203 算法提高 8皇后·改
- 按钮插件和按钮状态切换
- 项目需求分析答辩总结(含评审结果)——日不落战队
- vue报错elementUI使用datepicker报错Avoid mutating a prop directly since the value will be overwritten whene
- 更适合小孩的电动牙刷,轻柔呵护口腔,Combo咸蛋超人电动牙刷上手
- 年终回顾 | 小米技术最受欢迎的技术文章TOP20
- 主存、辅存、内存、外存、存储器:名词解释
- [渝粤教育] 中国传媒大学 计算机组成原理 参考 资料
- nginx反向代理加gitlab认证
- 中国网络安全人才需求
- 将SkeyeVSS综合安防监控视频流媒体云平台监控画面嵌入微信公众号进行直播
- 击溃一个30岁中年人的不仅仅是速度
- 仿个人税务 app html5_假个税APP蹭热点窃信息防不胜防,你千万别下载错了!
- 【WinSCP】强大的可视化远程文件传输 、管理工具 (支持多种协议,支持电脑与手机)
- 价廉物美的三维克莱因瓶(Klein Bottle)