/* * @(#)Byte.java 1.40 04/05/11 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.lang; /** * * The Byte class wraps a value of primitive type * byte in an object. An object of type * Byte contains a single field whose type is * byte. * *

* * In addition, this class provides several methods for converting a * byte to a String and a String * to a byte, as well as other constants and methods * useful when dealing with a byte. * * @author Nakul Saraiya * @version 1.40, 05/11/04 * @see java.lang.Number * @since JDK1.1 */ public final class Byte extends Number implements Comparable { /** * A constant holding the minimum value a byte can * have, -27. */ public static final byte MIN_VALUE = -128; /** * A constant holding the maximum value a byte can * have, 27-1. */ public static final byte MAX_VALUE = 127; /** * The Class instance representing the primitive type * byte. */ public static final Class TYPE = (Class) Class.getPrimitiveClass("byte"); /** * Returns a new String object representing the * specified byte. The radix is assumed to be 10. * * @param b the byte to be converted * @return the string representation of the specified byte * @see java.lang.Integer#toString(int) */ public static String toString(byte b) { return Integer.toString((int)b, 10); } private static class ByteCache { private ByteCache(){} static final Byte cache[] = new Byte[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache[i] = new Byte((byte)(i - 128)); } } /** * Returns a Byte instance representing the specified * byte value. * If a new Byte instance is not required, this method * should generally be used in preference to the constructor * {@link #Byte(byte)}, as this method is likely to yield * significantly better space and time performance by caching * frequently requested values. * * @param b a byte value. * @return a Byte instance representing b. * @since 1.5 */ public static Byte valueOf(byte b) { final int offset = 128; return ByteCache.cache[(int)b + offset]; } /** * Parses the string argument as a signed decimal * byte. The characters in the string must all be * decimal digits, except that the first character may be an ASCII * minus sign '-' ('\u002D') to * indicate a negative value. The resulting byte value is * returned, exactly as if the argument and the radix 10 were * given as arguments to the {@link #parseByte(java.lang.String, * int)} method. * * @param s a String containing the * byte representation to be parsed * @return the byte value represented by the * argument in decimal * @exception NumberFormatException if the string does not * contain a parsable byte. */ public static byte parseByte(String s) throws NumberFormatException { return parseByte(s, 10); } /** * Parses the string argument as a signed byte in the * radix specified by the second argument. The characters in the * string must all be digits, of the specified radix (as * determined by whether {@link java.lang.Character#digit(char, * int)} returns a nonnegative value) except that the first * character may be an ASCII minus sign '-' * ('\u002D') to indicate a negative value. The * resulting byte value is returned. *

* An exception of type NumberFormatException is * thrown if any of the following situations occurs: *

* * @param s the String containing the * byte * representation to be parsed * @param radix the radix to be used while parsing s * @return the byte value represented by the string * argument in the specified radix * @exception NumberFormatException If the string does * not contain a parsable byte. */ public static byte parseByte(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 (byte)i; } /** * Returns a Byte object holding the value * extracted from the specified String when parsed * with the radix given by the second argument. The first argument * is interpreted as representing a signed byte in * the radix specified by the second argument, exactly as if the * argument were given to the {@link #parseByte(java.lang.String, * int)} method. The result is a Byte object that * represents the byte value specified by the string. *

In other words, this method returns a Byte object * equal to the value of: * *

* new Byte(Byte.parseByte(s, radix)) *
* * @param s the string to be parsed * @param radix the radix to be used in interpreting s * @return a Byte object holding the value * represented by the string argument in the * specified radix. * @exception NumberFormatException If the String does * not contain a parsable byte. */ public static Byte valueOf(String s, int radix) throws NumberFormatException { return new Byte(parseByte(s, radix)); } /** * Returns a Byte object holding the value * given by the specified String. The argument is * interpreted as representing a signed decimal byte, * exactly as if the argument were given to the {@link * #parseByte(java.lang.String)} method. The result is a * Byte object that represents the byte * value specified by the string.

In other words, this method * returns a Byte object equal to the value of: * *

* new Byte(Byte.parseByte(s)) *
* * @param s the string to be parsed * @return a Byte object holding the value * represented by the string argument * @exception NumberFormatException If the String does * not contain a parsable byte. */ public static Byte valueOf(String s) throws NumberFormatException { return valueOf(s, 10); } /** * Decodes a String into a Byte. * Accepts decimal, hexadecimal, and octal numbers given by * the following grammar: * *
*
*
DecodableString: *
Signopt DecimalNumeral *
Signopt 0x HexDigits *
Signopt 0X HexDigits *
Signopt # HexDigits *
Signopt 0 OctalDigits *

*

Sign: *
- *
*
* * DecimalNumeral, HexDigits, and OctalDigits * are defined in §3.10.1 * of the Java * Language Specification. *

* The sequence of characters following an (optional) negative * sign and/or radix specifier ("0x", * "0X", "#", or * leading zero) is parsed as by the Byte.parseByte * method with the indicated radix (10, 16, or 8). This sequence * of characters must represent a positive value or a {@link * NumberFormatException} will be thrown. The result is negated * if first character of the specified String is the * minus sign. No whitespace characters are permitted in the * String. * * @param nm the String to decode. * @return a Byte object holding the byte * value represented by nm * @exception NumberFormatException if the String does not * contain a parsable byte. * @see java.lang.Byte#parseByte(java.lang.String, int) */ public static Byte decode(String nm) throws NumberFormatException { int radix = 10; int index = 0; boolean negative = false; Byte result; // Handle minus sign, if present if (nm.startsWith("-")) { negative = true; index++; } if (nm.startsWith("0x", index) || nm.startsWith("0X", index)) { index += 2; radix = 16; } else if (nm.startsWith("#", index)) { index++; radix = 16; } else if (nm.startsWith("0", index) && nm.length() > 1 + index) { index++; radix = 8; } if (nm.startsWith("-", index)) throw new NumberFormatException("Negative sign in wrong position"); try { result = Byte.valueOf(nm.substring(index), radix); result = negative ? new Byte((byte)-result.byteValue()) : result; } catch (NumberFormatException e) { // If number is Byte.MIN_VALUE, we'll end up here. The next line // handles this case, and causes any genuine format error to be // rethrown. String constant = negative ? new String("-" + nm.substring(index)) : nm.substring(index); result = Byte.valueOf(constant, radix); } return result; } /** * The value of the Byte. * * @serial */ private final byte value; /** * Constructs a newly allocated Byte object that * represents the specified byte value. * * @param value the value to be represented by the * Byte. */ public Byte(byte value) { this.value = value; } /** * Constructs a newly allocated Byte object that * represents the byte value indicated by the * String parameter. The string is converted to a * byte value in exactly the manner used by the * parseByte method for radix 10. * * @param s the String to be converted to a * Byte * @exception NumberFormatException If the String * does not contain a parsable byte. * @see java.lang.Byte#parseByte(java.lang.String, int) */ public Byte(String s) throws NumberFormatException { this.value = parseByte(s, 10); } /** * Returns the value of this Byte as a * byte. */ public byte byteValue() { return value; } /** * Returns the value of this Byte as a * short. */ public short shortValue() { return (short)value; } /** * Returns the value of this Byte as an * int. */ public int intValue() { return (int)value; } /** * Returns the value of this Byte as a * long. */ public long longValue() { return (long)value; } /** * Returns the value of this Byte as a * float. */ public float floatValue() { return (float)value; } /** * Returns the value of this Byte as a * double. */ public double doubleValue() { return (double)value; } /** * Returns a String object representing this * Byte's value. The value is converted to signed * decimal representation and returned as a string, exactly as if * the byte value were given as an argument to the * {@link java.lang.Byte#toString(byte)} method. * * @return a string representation of the value of this object in * base 10. */ public String toString() { return String.valueOf((int)value); } /** * Returns a hash code for this Byte. */ public int hashCode() { return (int)value; } /** * Compares this object to the specified object. The result is * true if and only if the argument is not * null and is a Byte object that * contains the same byte value as this object. * * @param obj the object to compare with * @return true if the objects are the same; * false otherwise. */ public boolean equals(Object obj) { if (obj instanceof Byte) { return value == ((Byte)obj).byteValue(); } return false; } /** * Compares two Byte objects numerically. * * @param anotherByte the Byte to be compared. * @return the value 0 if this Byte is * equal to the argument Byte; a value less than * 0 if this Byte is numerically less * than the argument Byte; and a value greater than * 0 if this Byte is numerically * greater than the argument Byte (signed * comparison). * @since 1.2 */ public int compareTo(Byte anotherByte) { return this.value - anotherByte.value; } /** * The number of bits used to represent a byte value in two's * complement binary form. * * @since 1.5 */ public static final int SIZE = 8; /** use serialVersionUID from JDK 1.1. for interoperability */ private static final long serialVersionUID = -7183698231559129828L; }