JDK源码解析---Short

1.概述

Short是short的包装类,最大值为2^15-1 ,最小值为-2^15。对基本数据类型short进行封装,提供了一些处理short数据类型的数据的方法。

2.类图

在这里插入图片描述

继承了Number,实现了数值类型转换的方法

实现了Comparabel接口对Float对象进行比较

实现了Serializable序列化接口

3.属性

静态常量

public static final short   MIN_VALUE = -32768;//最小值
  
public static final short   MAX_VALUE = 32767;//最大值

public static final Class<Short>    TYPE = (Class<Short>) Class.getPrimitiveClass("short");//Short.class对象

public static final int SIZE = 16;//占16位

public static final int BYTES = SIZE / Byte.SIZE;//占两个字节

private static final long serialVersionUID = 7515723908773894738L;//序列化版本号

私有常量

private final short value;//用于存储short类型的数值

4.构造方法

  1. 参数short 将参数赋值给value
public Short(short value) {
    this.value = value;
}
  1. 参数String。先按照十进制将String解析为short 然后赋值给value
public Short(String s) throws NumberFormatException {
    this.value = parseShort(s, 10);
}

5.缓存

将-128 ~ 127的数值封装成Short对象 然后保存在一个数组中作为缓存使用。

private static class ShortCache {
    private ShortCache(){}

    static final Short cache[] = new Short[-(-128) + 127 + 1];

    static {
        for(int i = 0; i < cache.length; i++)
            cache[i] = new Short((short)(i - 128));
    }
}

6.toXXXString

  1. toString(short s) 调用Integer的toString方法
public static String toString(short s) {
    return Integer.toString((int)s, 10);
}

7.parseXXX

  1. parseShort(String s, int radix) 按照进制数将String解析成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;
}
  1. parseShort(String s) 内部调用上面的方法,默认10进制
public static short parseShort(String s) throws NumberFormatException {
    return parseShort(s, 10);
}

8.valueOf

  1. (String s, int radix)按照进制数将String解析成short 然后将其封装成Short对象
public static Short valueOf(String s, int radix)
    throws NumberFormatException {
    return valueOf(parseShort(s, radix));
}
  1. valueOf(String s) 内部调用上面方法 默认10进制
public static Short valueOf(String s) throws NumberFormatException {
    return valueOf(s, 10);
}
  1. valueOf(short s) -128 ~ 127 直接从缓存中获取,否则就调用构造函数封装short
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);
}

9.XXXValue

类型转换

public byte byteValue() {
    return (byte)value;
}

public short shortValue() {
    return value;
}

public int intValue() {
    return (int)value;
}

public long longValue() {
    return (long)value;
}

public float floatValue() {
    return (float)value;
}

public double doubleValue() {
    return (double)value;
}

10.hashCode

Short对象的hashCode等于value值

@Override
public int hashCode() {
    return Short.hashCode(value);
}

public static int hashCode(short value) {
    return (int)value;
}

11.其他方法

public static short reverseBytes(short i) {//翻转
    return (short) (((i & 0xFF00) >> 8) | (i << 8));
}
public static int toUnsignedInt(short x) {// 转换成无符号int类型
    return ((int) x) & 0xffff;
}

public static long toUnsignedLong(short x) {// 转换成无符号long类型
    return ((long) x) & 0xffffL;
}

猜你喜欢

转载自blog.csdn.net/gongsenlin341/article/details/107741295