Short是short的包装类,表示两个字节以内的整型数值。
Short.java中的相关代码:
public final class Short extends Number implements Comparable<Short> {
…
}
1.Short被final修饰,不能被继承。
2.继承了Number,可以实现数值间的转换。
3.实现了Comparable
Short.java中的相关代码:
// short能表示的最小的值
public static final short MIN_VALUE = -32768;
// short能表示的最大的值
public static final short MAX_VALUE = 32767;
// 抑制没有类型检查而出现的警告
@SuppressWarnings("unchecked")
// Short类中对应的原始的short
// Short.class和short.class不相等,但Short.TYPE和short.class相等
public static final Class<Short> TYPE = (Class<Short>) Class.getPrimitiveClass("short");
// 用于保存short的值
private final short value;
// short占的位数
public static final int SIZE = 16;
// 一个short数值占的字节数
public static final int BYTES = SIZE / Byte.SIZE;
// 用于序列化
private static final long serialVersionUID = 7515723908773894738L;
该类用于数值从-128到127的Short对象的缓存。
Short.java中的相关代码:
private static class ShortCache {
// 私有化构造方法
private ShortCache(){}
// 创建长度为256的Short数组
// 128表示128个负数,127为127个正数,1表示0
static final Short cache[] = new Short[-(-128) + 127 + 1];
// 静态初始化代码块
static {
// 循环填充数据
for(int i = 0; i < cache.length; i++)
// // 128为偏置,数组0位置数值为-128,255位置数值为127
cache[i] = new Short((short)(i - 128));
}
}
Short.java中的相关代码:
public Short(short value) {
// 保存数值到全局变量
this.value = value;
}
Short.java中的相关代码:
public Short(String s) throws NumberFormatException {
// 调用parseShort方法,作为十进制数解析成short型数值
this.value = parseShort(s, 10);
}
将带有+、-号的字符串按十进制解析成short型数值。
Short.java中的相关代码:
public static short parseShort(String s) throws NumberFormatException {
// 调用重载方法
return parseShort(s, 10);
}
调用重载的parseByte方法。
指定进制对字符串进行解析。
Short.java中的相关代码:
public static short parseShort(String s, int radix)
throws NumberFormatException {
// 调用Integer的parseInt方法,解析成int型
int i = Integer.parseInt(s, radix);
// 判断解析出的数值,是否满足short型数值的范围
if (i < MIN_VALUE || i > MAX_VALUE)
throw new NumberFormatException(
"Value out of range. Value:\"" + s + "\" Radix:" + radix);
// 若满足,则进行类型转换,并返回
return (short)i;
}
将String类型的对象转换为Short型。
Short.java中的相关代码:
public static Short valueOf(String s) throws NumberFormatException {
// 调用重载方法,并返回
return valueOf(s, 10);
}
调用了重载的valueOf方法。
指定进制对String对象进行转换。
Short.java中的相关代码:
public static Short valueOf(String s, int radix)
throws NumberFormatException {
// 调用parseShort方法进行转换
// 转换的结果作为参数,调用重载方法,并返回
return valueOf(parseShort(s, radix));
}
调用了重载的valueOf方法。
Short.java中的相关代码:
public static Short valueOf(short s) {
// 128为偏置
final int offset = 128;
// 转换为int类型数据
int sAsInt = s;
// 若满足缓存范围,则从缓存中获取
if (sAsInt >= -128 && sAsInt <= 127) {
return ShortCache.cache[sAsInt + offset];
}
// 不满足缓存范围,则创建新对象
return new Short(s);
}
对字符串形式的数值进行解析。
decode方法支持的字符串形式比parseShort方法更丰富。
支持不同进制的标识符(0x、#等)和小数形式等。
Short.java中的相关代码:
public static Short decode(String nm) throws NumberFormatException {
// 调用Integer的decode方法,解析成int型
int i = Integer.decode(nm);
// 判断解析出的数据是否满足byte型数值的范围要求
if (i < MIN_VALUE || i > MAX_VALUE)
throw new NumberFormatException(
"Value " + i + " out of range from input " + nm);
// 现进行类型转换,再调用valueOf方法,从缓存中获取数值
return valueOf((short)i);
}
将当前short型的数值转换为byte类型的数值
Short.java中的相关代码:
public byte byteValue() {
// 进行类型转换,并返回
return (byte)value;
}
获取当前short类型的数值
Short.java中的相关代码:
public short shortValue() {
// 直接返回
return value;
}
将当前short型的数值转换为int类型的数值。
Short.java中的相关代码:
public int intValue() {
// 进行类型转换,并返回
return (int)value;
}
将当前short型的数值转换为long类型的数值。
Short.java中的相关代码:
public long longValue() {
// 进行类型转换,并返回
return (long)value;
}
将当前short型的数值转换为float类型的数值。
Short.java中的相关代码:
public float floatValue() {
// 进行类型转换,并返回
return (float)value;
}
将当前short型的数值转换为double类型的数值。
Short.java中的相关代码:
public double doubleValue() {
// 进行类型转换,并返回
return (double)value;
}
将short型数值转换为String型。
Short.java中的相关代码:
public String toString() {
// 调用Integer的toString方法进行转换
return Integer.toString((int)value);
}
Short.java中的相关代码:
public static String toString(short s) {
// 调用Integer的toString方法,按十进制的方式进行转换
return Integer.toString((int)s, 10);
}
求short数值的哈希值。
Short.java中的相关代码:
@Override
public int hashCode() {
return Short.hashCode(value);
}
Short.java中的相关代码:
public static int hashCode(short value) {
// 类型转换并返回
return (int)value;
}
Short型对象的哈希值就是它本身的值。
比较两个Short对象是否相等。
Short.java中的相关代码:
public boolean equals(Object obj) {
// 若对象类型为Byte
if (obj instanceof Short) {
// 比较两者是否相等
return value == ((Short)obj).shortValue();
}
// 若类型不为Byte,返回false
return false;
}
比较两个Short对象是否相等。
若相等则返回0,若不相等则返回两个数之差。
Short.java中的相关代码:
public int compareTo(Short anotherShort) {
// 调用compare方法
return compare(this.value, anotherShort.value);
}
Short.java中的相关代码:
public static int compare(short x, short y) {
// 返回两个数之差
return x - y;
}
将数值i在二进制表示下,按字节将位的顺序反转,即每8位一反转。
Short.java中的相关代码:
public static short reverseBytes(short i) {
return (short) (((i & 0xFF00) >> 8) | (i << 8));
}
将当前short型的数值转换为无符号int型数值。
Short.java中的相关代码:
public static int toUnsignedInt(short x) {
// 进行类型转换,和1111111111111111B进行与运算,返回
return ((int) x) & 0xffff;
}
将当前short型的数值转换为无符号long型数值。
Short.java中的相关代码:
public static long toUnsignedLong(short x) {
// 进行类型转换,和1111111111111111B进行与运算,返回
return ((long) x) & 0xffffL;
}