9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package java.lang;
27
28 import java.lang.annotation.Native;
29 import java.util.Properties;
30
31 /**
32 * The {@code Integer} class wraps a value of the primitive type
33 * {@code int} in an object. An object of type {@code Integer}
34 * contains a single field whose type is {@code int}.
35 *
36 * <p>In addition, this class provides several methods for converting
37 * an {@code int} to a {@code String} and a {@code String} to an
38 * {@code int}, as well as other constants and methods useful when
39 * dealing with an {@code int}.
40 *
41 * <p>Implementation note: The implementations of the "bit twiddling"
42 * methods (such as {@link #highestOneBit(int) highestOneBit} and
43 * {@link #numberOfTrailingZeros(int) numberOfTrailingZeros}) are
44 * based on material from Henry S. Warren, Jr.'s <i>Hacker's
45 * Delight</i>, (Addison Wesley, 2002).
46 *
47 * @author Lee Boynton
48 * @author Arthur van Hoff
49 * @author Josh Bloch
168 * {@code 10} is used instead.
169 *
170 * <p>Note that since the first argument is treated as an unsigned
171 * value, no leading sign character is printed.
172 *
173 * <p>If the magnitude is zero, it is represented by a single zero
174 * character {@code '0'} ({@code '\u005Cu0030'}); otherwise,
175 * the first character of the representation of the magnitude will
176 * not be the zero character.
177 *
178 * <p>The behavior of radixes and the characters used as digits
179 * are the same as {@link #toString(int, int) toString}.
180 *
181 * @param i an integer to be converted to an unsigned string.
182 * @param radix the radix to use in the string representation.
183 * @return an unsigned string representation of the argument in the specified radix.
184 * @see #toString(int, int)
185 * @since 1.8
186 */
187 public static String toUnsignedString(int i, int radix) {
188 return Long.toString(toUnsignedLong(i), radix);
189 }
190
191 /**
192 * Returns a string representation of the integer argument as an
193 * unsigned integer in base 16.
194 *
195 * <p>The unsigned integer value is the argument plus 2<sup>32</sup>
196 * if the argument is negative; otherwise, it is equal to the
197 * argument. This value is converted to a string of ASCII digits
198 * in hexadecimal (base 16) with no extra leading
199 * {@code 0}s.
200 *
201 * <p>The value of the argument can be recovered from the returned
202 * string {@code s} by calling {@link
203 * Integer#parseUnsignedInt(String, int)
204 * Integer.parseUnsignedInt(s, 16)}.
205 *
206 * <p>If the unsigned magnitude is zero, it is represented by a
207 * single zero character {@code '0'} ({@code '\u005Cu0030'});
208 * otherwise, the first character of the representation of the
291 * otherwise, the first character of the representation of the
292 * unsigned magnitude will not be the zero character. The
293 * characters {@code '0'} ({@code '\u005Cu0030'}) and {@code
294 * '1'} ({@code '\u005Cu0031'}) are used as binary digits.
295 *
296 * @param i an integer to be converted to a string.
297 * @return the string representation of the unsigned integer value
298 * represented by the argument in binary (base 2).
299 * @see #parseUnsignedInt(String, int)
300 * @see #toUnsignedString(int, int)
301 * @since JDK1.0.2
302 */
303 public static String toBinaryString(int i) {
304 return toUnsignedString0(i, 1);
305 }
306
307 /**
308 * Convert the integer to an unsigned number.
309 */
310 private static String toUnsignedString0(int i, int shift) {
311 char[] buf = new char[32];
312 int charPos = 32;
313 int radix = 1 << shift;
314 int mask = radix - 1;
315 do {
316 buf[--charPos] = digits[i & mask];
317 i >>>= shift;
318 } while (i != 0);
319
320 return new String(buf, charPos, (32 - charPos));
321 }
322
323
324 final static char [] DigitTens = {
325 '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
326 '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
327 '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
328 '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
329 '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
330 '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
331 '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
332 '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
333 '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
334 '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
335 } ;
336
337 final static char [] DigitOnes = {
338 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
339 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
340 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
858 * Returns the value of this {@code Integer} as a {@code short}
859 * after a narrowing primitive conversion.
860 * @jls 5.1.3 Narrowing Primitive Conversions
861 */
862 public short shortValue() {
863 return (short)value;
864 }
865
866 /**
867 * Returns the value of this {@code Integer} as an
868 * {@code int}.
869 */
870 public int intValue() {
871 return value;
872 }
873
874 /**
875 * Returns the value of this {@code Integer} as a {@code long}
876 * after a widening primitive conversion.
877 * @jls 5.1.2 Widening Primitive Conversions
878 */
879 public long longValue() {
880 return (long)value;
881 }
882
883 /**
884 * Returns the value of this {@code Integer} as a {@code float}
885 * after a widening primitive conversion.
886 * @jls 5.1.2 Widening Primitive Conversions
887 */
888 public float floatValue() {
889 return (float)value;
890 }
891
892 /**
893 * Returns the value of this {@code Integer} as a {@code double}
894 * after a widening primitive conversion.
895 * @jls 5.1.2 Widening Primitive Conversions
896 */
897 public double doubleValue() {
|
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package java.lang;
27
28 import java.lang.annotation.Native;
29
30 /**
31 * The {@code Integer} class wraps a value of the primitive type
32 * {@code int} in an object. An object of type {@code Integer}
33 * contains a single field whose type is {@code int}.
34 *
35 * <p>In addition, this class provides several methods for converting
36 * an {@code int} to a {@code String} and a {@code String} to an
37 * {@code int}, as well as other constants and methods useful when
38 * dealing with an {@code int}.
39 *
40 * <p>Implementation note: The implementations of the "bit twiddling"
41 * methods (such as {@link #highestOneBit(int) highestOneBit} and
42 * {@link #numberOfTrailingZeros(int) numberOfTrailingZeros}) are
43 * based on material from Henry S. Warren, Jr.'s <i>Hacker's
44 * Delight</i>, (Addison Wesley, 2002).
45 *
46 * @author Lee Boynton
47 * @author Arthur van Hoff
48 * @author Josh Bloch
167 * {@code 10} is used instead.
168 *
169 * <p>Note that since the first argument is treated as an unsigned
170 * value, no leading sign character is printed.
171 *
172 * <p>If the magnitude is zero, it is represented by a single zero
173 * character {@code '0'} ({@code '\u005Cu0030'}); otherwise,
174 * the first character of the representation of the magnitude will
175 * not be the zero character.
176 *
177 * <p>The behavior of radixes and the characters used as digits
178 * are the same as {@link #toString(int, int) toString}.
179 *
180 * @param i an integer to be converted to an unsigned string.
181 * @param radix the radix to use in the string representation.
182 * @return an unsigned string representation of the argument in the specified radix.
183 * @see #toString(int, int)
184 * @since 1.8
185 */
186 public static String toUnsignedString(int i, int radix) {
187 return Long.toUnsignedString(toUnsignedLong(i), radix);
188 }
189
190 /**
191 * Returns a string representation of the integer argument as an
192 * unsigned integer in base 16.
193 *
194 * <p>The unsigned integer value is the argument plus 2<sup>32</sup>
195 * if the argument is negative; otherwise, it is equal to the
196 * argument. This value is converted to a string of ASCII digits
197 * in hexadecimal (base 16) with no extra leading
198 * {@code 0}s.
199 *
200 * <p>The value of the argument can be recovered from the returned
201 * string {@code s} by calling {@link
202 * Integer#parseUnsignedInt(String, int)
203 * Integer.parseUnsignedInt(s, 16)}.
204 *
205 * <p>If the unsigned magnitude is zero, it is represented by a
206 * single zero character {@code '0'} ({@code '\u005Cu0030'});
207 * otherwise, the first character of the representation of the
290 * otherwise, the first character of the representation of the
291 * unsigned magnitude will not be the zero character. The
292 * characters {@code '0'} ({@code '\u005Cu0030'}) and {@code
293 * '1'} ({@code '\u005Cu0031'}) are used as binary digits.
294 *
295 * @param i an integer to be converted to a string.
296 * @return the string representation of the unsigned integer value
297 * represented by the argument in binary (base 2).
298 * @see #parseUnsignedInt(String, int)
299 * @see #toUnsignedString(int, int)
300 * @since JDK1.0.2
301 */
302 public static String toBinaryString(int i) {
303 return toUnsignedString0(i, 1);
304 }
305
306 /**
307 * Convert the integer to an unsigned number.
308 */
309 private static String toUnsignedString0(int i, int shift) {
310 // assert shift > 0 && shift <=5 : "Illegal shift value";
311 int mag = Integer.SIZE - Integer.numberOfLeadingZeros(i);
312 int chars = Math.max(((mag + (shift - 1)) / shift), 1);
313 char[] buf = new char[chars];
314 int charPos = chars;
315 int radix = 1 << shift;
316 int mask = radix - 1;
317 do {
318 buf[--charPos] = digits[i & mask];
319 i >>>= shift;
320 } while (i != 0);
321
322 // Use special constructor which takes over "buf".
323 return new String(buf, true);
324 }
325
326
327 final static char [] DigitTens = {
328 '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
329 '1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
330 '2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
331 '3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
332 '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
333 '5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
334 '6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
335 '7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
336 '8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
337 '9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
338 } ;
339
340 final static char [] DigitOnes = {
341 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
342 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
343 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
861 * Returns the value of this {@code Integer} as a {@code short}
862 * after a narrowing primitive conversion.
863 * @jls 5.1.3 Narrowing Primitive Conversions
864 */
865 public short shortValue() {
866 return (short)value;
867 }
868
869 /**
870 * Returns the value of this {@code Integer} as an
871 * {@code int}.
872 */
873 public int intValue() {
874 return value;
875 }
876
877 /**
878 * Returns the value of this {@code Integer} as a {@code long}
879 * after a widening primitive conversion.
880 * @jls 5.1.2 Widening Primitive Conversions
881 * @see Integer#toUnsignedLong(int)
882 */
883 public long longValue() {
884 return (long)value;
885 }
886
887 /**
888 * Returns the value of this {@code Integer} as a {@code float}
889 * after a widening primitive conversion.
890 * @jls 5.1.2 Widening Primitive Conversions
891 */
892 public float floatValue() {
893 return (float)value;
894 }
895
896 /**
897 * Returns the value of this {@code Integer} as a {@code double}
898 * after a widening primitive conversion.
899 * @jls 5.1.2 Widening Primitive Conversions
900 */
901 public double doubleValue() {
|