为了能吸引您了解short,我们先做个小测验: 

以下问题能编译通过吗?能运行成功吗?结果是什么?

Q1. short s1 = 9;short s2 = 011;
Q2. Short sob = 9; Short sob1 = new Short(9);
Q3. 如果成功得到Q2的sob,sob1,那么 sob.equal(sob1),sob.equal(0x11)是true or false;
Q4. Short sob = 128; sob.byteValue();抛异常吗?
Q5. short s1 = 9 ; short s2 = 8; s = s1+s2; s1+=9; 能否正常编译,运行 

我朋友说,就像孔乙己问茴香豆的“茴”有几种写法(我不完全否定,呵呵)。

当然,如果愿意,不妨看看。就像我们千篇一律使用int 或者 ArrayList一样,有一天,你也许会希望自己稍微能对细节把握的精准点。  

short 最大值 Short.MAX_VALUE = 32767 或者  2^15-1
最小值 Short.MIN_VALUE = –32768 或者 -2^15 

下面我对一些方法做些小注,除非我认为非要API原翻译信息来解释此方法,我会借用。

method:hashcode 
包装类型Short 的hashcode直接强转(int)value; 

method:equal 
比较的是值,值相等,则返回true,如果参数对象不是short, 同样返回false 

method :byteValue 返回byte值,如果 value<127 按照二进制码,去低八位,高位第一位为1代表负数。
例如:((byte)257 == 1) == true; 

method: toString
jdk API:该值被转换成有符号的十进制表示形式,并作为一个字符串返回,正如将 short 值作为一个参数指定给toString(short) 方法所得到的值那样。 

method: toString(short s)
返回表示指定 short 的一个新 String 对象,用十进制表示。  

method:parseShort(String s)

将字符串参数解析为有符号的十进制 short。该字符串中的字符必须都是十进制数字,除非第一个字符是表示负值的 ASCII 符号中的负号 '-' ('\u002D')。返回得到的 short 值,此值与用该参数和基数 10 作为参数的 parseShort(java.lang.String, int) 方法得到的值相同。 

 

method:parseShort(String s, int radix)

将字符串参数解析为由第二个参数指定的基数中的有符号的 short。该字符串中的字符必须都是指定基数(这取决于 Character.digit(char, int) 是否返回非负值)的数字,除非第一个字符是表示负值的 ASCII 符号中的负号 “-” ('\u002D')。返回得到的 byte 值。

如果没有如下情况:
第一个参数是 null 或零长度的字符串。 基数小于 Character.MIN_RADIX 或大于 Character.MAX_RADIX。
除了在字符串长度超过 1 的情况下第一个字符可能是负号 “-” ('\u002D') 之外,字符串的任何字符都不是指定基数的数字。
字符串所表示的值不是 short 类型的值 
返回(short)value

method: valueof(String s)
调用了 new Short(Short.parseShort(s, radix)) 

method: valueof(short)
返回表示指定 short 值的 Short 实例。如果不需要新的 Short 实例,则通常应该优先采用此方法,而不是构造方法 Short(short),因为此方法很可能通过缓存经常请求的值来显著提高空间和时间性能。

见代码:

 if (sAsInt <=-128 && sAsInt >= 127) {
 // must cache
   return ShortCache.cache[sAsInt + offset]; 
 }

 

注:getInstance() ,valueof, of(valueof 简洁写法)通常被表达获取一个实例,在静态工厂方法中表现尤甚。

method : decode

解密8进制,16进制为10进制int值

 

method :compareTo
比较的是value
 

method :reverseBytes(short)

操作:(((i & 0xFF00) > >8) | (i << 8))

  --((i & 0xFF00) >> 8) 去i 的前8位 放入后8位  

那我们来回到开头提到的5个问题,一切变得简单。只有第五题,我给出一点提示:赋值运算符--简单赋值运算符和复合赋值运算符。 

 

作个小小的总结:

1. 记住short的hashcode

2. compareTo 比较的是value,所以只要value相同,就返回true.

3. 除了声明,jvm会在任何可能的地方把short变成int。

4. String转换成short 优先选择valueof,除非你很确认string的value.