1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.lang;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The wrapper for the primitive type {@code short}.
22726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch *
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.lang.Number
24f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.1
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
260d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes@FindBugsSuppressWarnings("DM_NUMBER_CTOR")
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic final class Short extends Number implements Comparable<Short> {
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    private static final long serialVersionUID = 7515723908773894738L;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The value which the receiver represents.
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final short value;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constant for the maximum {@code short} value, 2<sup>15</sup>-1.
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final short MAX_VALUE = (short) 0x7FFF;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constant for the minimum {@code short} value, -2<sup>15</sup>.
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final short MIN_VALUE = (short) 0x8000;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constant for the number of bits needed to represent a {@code short} in
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * two's complement form.
49f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
50f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @since 1.5
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int SIZE = 16;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
55f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * The {@link Class} object that represents the primitive type {@code
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * short}.
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("unchecked")
59726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    public static final Class<Short> TYPE
60726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch            = (Class<Short>) short[].class.getComponentType();
61726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    // Note: Short.TYPE can't be set to "short.class", since *that* is
62726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    // defined to be "java.lang.Short.TYPE";
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new {@code Short} from the specified string.
66f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a short value.
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
708890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} cannot be parsed as a short value.
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see #parseShort(String)
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
73d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    public Short(String string) throws NumberFormatException {
74d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        this(parseShort(string));
75d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new {@code Short} with the specified primitive short value.
79f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the primitive short value to store in the new instance.
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
83d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    public Short(short value) {
84d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        this.value = value;
85d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
87d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    @Override
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public byte byteValue() {
89d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return (byte) value;
90d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compares this object to the specified short object to determine their
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * relative order.
95726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch     *
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param object
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the short object to compare this object to.
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a negative value if the value of this short is less than the
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         value of {@code object}; 0 if the value of this short and the
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         value of {@code object} are equal; a positive value if the value
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         of this short is greater than the value of {@code object}.
102f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @throws NullPointerException
103f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *             if {@code object} is null.
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see java.lang.Comparable
105f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @since 1.2
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
107d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    public int compareTo(Short object) {
108c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes        return compare(value, object.value);
109c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes    }
110c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes
111c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes    /**
112c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes     * Compares two {@code short} values.
113c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes     * @return 0 if lhs = rhs, less than 0 if lhs &lt; rhs, and greater than 0 if lhs &gt; rhs.
114c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes     * @since 1.7
115c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes     */
116cbd61d6846af5d48fbb1c34b60a5c74a94f71901Elliott Hughes    public static int compare(short lhs, short rhs) {
117c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes        return lhs > rhs ? 1 : (lhs < rhs ? -1 : 0);
118d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string and returns a {@code Short} instance if the
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * string can be decoded into a short value. The string may be an optional
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * minus sign "-" followed by a hexadecimal ("0x..." or "#..."), octal
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * ("0..."), or decimal ("...") representation of a short.
125f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a string representation of a short value.
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a {@code Short} containing the value represented by
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code string}.
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
1318890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} cannot be parsed as a short value.
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
133d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    public static Short decode(String string) throws NumberFormatException {
134d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        int intValue = Integer.decode(string).intValue();
135d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        short result = (short) intValue;
136d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        if (result == intValue) {
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return valueOf(result);
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1391f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes        throw new NumberFormatException("Value out of range for short: \"" + string + "\"");
140d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
142d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    @Override
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public double doubleValue() {
144d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return value;
145d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compares this instance with the specified object and indicates if they
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * are equal. In order to be equal, {@code object} must be an instance of
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code Short} and have the same short value as this object.
151f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param object
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare this short with.
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if the specified object is equal to this
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code Short}; {@code false} otherwise.
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
157d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    @Override
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object object) {
1590d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes        return (object instanceof Short) && (((Short) object).value == value);
160d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
162d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    @Override
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public float floatValue() {
164d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return value;
165d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
167d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    @Override
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
169d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return value;
170d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
172d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    @Override
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int intValue() {
174d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return value;
175d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
177d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    @Override
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public long longValue() {
179d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return value;
180d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string as a signed decimal short value. The ASCII
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * character \u002d ('-') is recognized as the minus sign.
185f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a short value.
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the primitive short value represented by {@code string}.
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
1908890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} cannot be parsed as a short value.
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
192d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    public static short parseShort(String string) throws NumberFormatException {
193d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return parseShort(string, 10);
194d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string as a signed short value using the specified
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * radix. The ASCII character \u002d ('-') is recognized as the minus sign.
199f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a short value.
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param radix
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the radix to use when parsing.
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the primitive short value represented by {@code string} using
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code radix}.
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
2078890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} cannot be parsed as a short value, or
2088890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             {@code radix < Character.MIN_RADIX ||
2098890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             radix > Character.MAX_RADIX}.
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2111f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes    public static short parseShort(String string, int radix) throws NumberFormatException {
212d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        int intValue = Integer.parseInt(string, radix);
213d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        short result = (short) intValue;
214d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        if (result == intValue) {
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return result;
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2171f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes        throw new NumberFormatException("Value out of range for short: \"" + string + "\"");
218d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the primitive value of this short.
222f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this object's primitive value.
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public short shortValue() {
227d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return value;
228d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
230d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    @Override
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString() {
232d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return Integer.toString(value);
233d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a string containing a concise, human-readable description of the
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * specified short value with radix 10.
238f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             the short to convert to a string.
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a printable representation of {@code value}.
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
243d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    public static String toString(short value) {
244d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return Integer.toString(value);
245d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string as a signed decimal short value.
249f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a short value.
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a {@code Short} instance containing the short value represented
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         by {@code string}.
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
2558890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} cannot be parsed as a short value.
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see #parseShort(String)
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
258d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    public static Short valueOf(String string) throws NumberFormatException {
259d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return valueOf(parseShort(string));
260d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string as a signed short value using the specified
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * radix.
265f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a short value.
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param radix
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the radix to use when parsing.
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a {@code Short} instance containing the short value represented
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         by {@code string} using {@code radix}.
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
2738890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} cannot be parsed as a short value, or
2748890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             {@code radix < Character.MIN_RADIX ||
2758890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             radix > Character.MAX_RADIX}.
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see #parseShort(String, int)
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2788890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes    public static Short valueOf(String string, int radix) throws NumberFormatException {
279d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes        return valueOf(parseShort(string, radix));
280d21d78fd49a2d798218e8c8aefbddb26a0e71bbbElliott Hughes    }
281726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reverses the bytes of the specified short.
284726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch     *
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param s
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the short value for which to reverse bytes.
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the reversed value.
288f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @since 1.5
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static short reverseBytes(short s) {
291726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch        return (short) ((s << 8) | ((s >>> 8) & 0xFF));
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code Short} instance for the specified short value.
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If it is not necessary to get a new {@code Short} instance, it is
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * recommended to use this method instead of the constructor, since it
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * maintains a cache of instances which may result in better performance.
300f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param s
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the short value to store in the instance.
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a {@code Short} instance containing {@code s}.
304f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @since 1.5
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Short valueOf(short s) {
307726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch        return s < -128 || s >= 128 ? new Short(s) : SMALL_VALUES[s + 128];
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
310726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    /**
311726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch     * A cache of instances used by {@link Short#valueOf(short)} and auto-boxing.
312726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch     */
313726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    private static final Short[] SMALL_VALUES = new Short[256];
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
315726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    static {
3160d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes        for (int i = -128; i < 128; i++) {
317726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch            SMALL_VALUES[i + 128] = new Short((short) i);
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
321