⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 integer.java

📁 《透视Java》的源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * @(#)Integer.java	1.76 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.lang;/** * The <code>Integer</code> class wraps a value of the primitive type * <code>int</code> in an object. An object of type * <code>Integer</code> contains a single field whose type is * <code>int</code>. * *  <p> *  * In addition, this class provides several methods for converting an * <code>int</code> to a <code>String</code> and a <code>String</code> * to an <code>int</code>, as well as other constants and methods * useful when dealing with an <code>int</code>. * * @author  Lee Boynton * @author  Arthur van Hoff * @version 1.76, 01/23/03 * @since   JDK1.0 */public final class Integer extends Number implements Comparable {    /**     * A constant holding the minimum value an <code>int</code> can     * have, -2<sup>31</sup>.     */    public static final int   MIN_VALUE = 0x80000000;    /**     * A constant holding the maximum value an <code>int</code> can     * have, 2<sup>31</sup>-1.     */    public static final int   MAX_VALUE = 0x7fffffff;    /**     * The <code>Class</code> instance representing the primitive type     * <code>int</code>.     *     * @since   JDK1.1     */    public static final Class	TYPE = Class.getPrimitiveClass("int");    /**     * All possible chars for representing a number as a String     */    final static char[] digits = {	'0' , '1' , '2' , '3' , '4' , '5' ,	'6' , '7' , '8' , '9' , 'a' , 'b' ,	'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,	'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,	'o' , 'p' , 'q' , 'r' , 's' , 't' ,	'u' , 'v' , 'w' , 'x' , 'y' , 'z'    };    /**     * Returns a string representation of the first argument in the     * radix specified by the second argument.     * <p>     * If the radix is smaller than <code>Character.MIN_RADIX</code>     * or larger than <code>Character.MAX_RADIX</code>, then the radix     * <code>10</code> is used instead.     * <p>     * If the first argument is negative, the first element of the     * result is the ASCII minus character <code>'-'</code>     * (<code>'&#92;u002D'</code>). If the first argument is not     * negative, no sign character appears in the result.     * <p>     * The remaining characters of the result represent the magnitude     * of the first argument. If the magnitude is zero, it is     * represented by a single zero character <code>'0'</code>     * (<code>'&#92;u0030'</code>); otherwise, the first character of     * the representation of the magnitude will not be the zero     * character.  The following ASCII characters are used as digits:      * <blockquote><pre>     *   0123456789abcdefghijklmnopqrstuvwxyz     * </pre></blockquote>     * These are <code>'&#92;u0030'</code> through     * <code>'&#92;u0039'</code> and <code>'&#92;u0061'</code> through     * <code>'&#92;u007A'</code>. If <code>radix</code> is     * <var>N</var>, then the first <var>N</var> of these characters     * are used as radix-<var>N</var> digits in the order shown. Thus,     * the digits for hexadecimal (radix 16) are     * <code>0123456789abcdef</code>. If uppercase letters are     * desired, the {@link java.lang.String#toUpperCase()} method may     * be called on the result:     * <blockquote><pre>     * Integer.toString(n, 16).toUpperCase()     * </pre></blockquote>     *     * @param   i       an integer to be converted to a string.     * @param   radix   the radix to use in the string representation.     * @return  a string representation of the argument in the specified radix.     * @see     java.lang.Character#MAX_RADIX     * @see     java.lang.Character#MIN_RADIX     */    public static String toString(int i, int radix) {        if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)	    radix = 10;	/* Use the faster version */	if (radix == 10) {	    return toString(i);	}	char buf[] = new char[33];	boolean negative = (i < 0);	int charPos = 32;	if (!negative) {	    i = -i;	}	while (i <= -radix) {	    buf[charPos--] = digits[-(i % radix)];	    i = i / radix;	}	buf[charPos] = digits[-i];	if (negative) {	    buf[--charPos] = '-';	}	return new String(buf, charPos, (33 - charPos));    }    /**     * Returns a string representation of the integer argument as an     * unsigned integer in base&nbsp;16.     * <p>     * The unsigned integer value is the argument plus 2<sup>32</sup>     * if the argument is negative; otherwise, it is equal to the     * argument.  This value is converted to a string of ASCII digits     * in hexadecimal (base&nbsp;16) with no extra leading     * <code>0</code>s. If the unsigned magnitude is zero, it is     * represented by a single zero character <code>'0'</code>     * (<code>'&#92;u0030'</code>); otherwise, the first character of     * the representation of the unsigned magnitude will not be the     * zero character. The following characters are used as     * hexadecimal digits:     * <blockquote><pre>     * 0123456789abcdef     * </pre></blockquote>     * These are the characters <code>'&#92;u0030'</code> through     * <code>'&#92;u0039'</code> and <code>'&#92;u0061'</code> through     * <code>'&#92;u0066'</code>. If uppercase letters are     * desired, the {@link java.lang.String#toUpperCase()} method may     * be called on the result:     * <blockquote><pre>     * Integer.toHexString(n).toUpperCase()     * </pre></blockquote>     *     * @param   i   an integer to be converted to a string.     * @return  the string representation of the unsigned integer value     *          represented by the argument in hexadecimal (base&nbsp;16).     * @since   JDK1.0.2     */    public static String toHexString(int i) {	return toUnsignedString(i, 4);    }    /**     * Returns a string representation of the integer argument as an     * unsigned integer in base&nbsp;8.     * <p>     * The unsigned integer value is the argument plus 2<sup>32</sup>     * if the argument is negative; otherwise, it is equal to the     * argument.  This value is converted to a string of ASCII digits     * in octal (base&nbsp;8) with no extra leading <code>0</code>s.     * <p>     * If the unsigned magnitude is zero, it is represented by a     * single zero character <code>'0'</code>     * (<code>'&#92;u0030'</code>); otherwise, the first character of     * the representation of the unsigned magnitude will not be the     * zero character. The following characters are used as octal     * digits:     * <blockquote><pre>     * 01234567     * </pre></blockquote>     * These are the characters <code>'&#92;u0030'</code> through     * <code>'&#92;u0037'</code>.     *     * @param   i   an integer to be converted to a string.     * @return  the string representation of the unsigned integer value     *          represented by the argument in octal (base&nbsp;8).     * @since   JDK1.0.2     */    public static String toOctalString(int i) {	return toUnsignedString(i, 3);    }    /**     * Returns a string representation of the integer argument as an     * unsigned integer in base&nbsp;2.     * <p>     * The unsigned integer value is the argument plus 2<sup>32</sup>     * if the argument is negative; otherwise it is equal to the     * argument.  This value is converted to a string of ASCII digits     * in binary (base&nbsp;2) with no extra leading <code>0</code>s.     * If the unsigned magnitude is zero, it is represented by a     * single zero character <code>'0'</code>     * (<code>'&#92;u0030'</code>); otherwise, the first character of     * the representation of the unsigned magnitude will not be the     * zero character. The characters <code>'0'</code>     * (<code>'&#92;u0030'</code>) and <code>'1'</code>     * (<code>'&#92;u0031'</code>) are used as binary digits.     *     * @param   i   an integer to be converted to a string.     * @return  the string representation of the unsigned integer value     *          represented by the argument in binary (base&nbsp;2).     * @since   JDK1.0.2     */    public static String toBinaryString(int i) {	return toUnsignedString(i, 1);    }    /**     * Convert the integer to an unsigned number.     */    private static String toUnsignedString(int i, int shift) {	char[] buf = new char[32];	int charPos = 32;	int radix = 1 << shift;	int mask = radix - 1;	do {	    buf[--charPos] = digits[i & mask];	    i >>>= shift;	} while (i != 0);	return new String(buf, charPos, (32 - charPos));    }    final static char [] DigitTens = {	'0', '0', '0', '0', '0', '0', '0', '0', '0', '0',	'1', '1', '1', '1', '1', '1', '1', '1', '1', '1',	'2', '2', '2', '2', '2', '2', '2', '2', '2', '2',	'3', '3', '3', '3', '3', '3', '3', '3', '3', '3',	'4', '4', '4', '4', '4', '4', '4', '4', '4', '4',	'5', '5', '5', '5', '5', '5', '5', '5', '5', '5',	'6', '6', '6', '6', '6', '6', '6', '6', '6', '6',	'7', '7', '7', '7', '7', '7', '7', '7', '7', '7',	'8', '8', '8', '8', '8', '8', '8', '8', '8', '8',	'9', '9', '9', '9', '9', '9', '9', '9', '9', '9',	} ;     final static char [] DigitOnes = { 	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',	} ;	// I use the "invariant division by multiplication" trick to	// accelerate Integer.toString.  In particular we want to	// avoid division by 10.	//	// The "trick" has roughly the same performance characterists	// as the "classic" Integer.toString code on a non-JIT VM.	// The trick avoids .rem and .div calls but has a longer code	// path and is thus dominated by dispatch overhead.  In the	// JIT case the dispatch overhead doesn't exist and the	// "trick" is considerably faster than the classic code.	//	// TODO-FIXME: convert (x * 52429) into the equiv shift-add	// sequence.	//	// RE:  Division by Invariant Integers using Multiplication	//      T Gralund, P Montgomery	//      ACM PLDI 1994	//    /**     * Returns a <code>String</code> object representing the     * specified integer. The argument is converted to signed decimal     * representation and returned as a string, exactly as if the     * argument and radix 10 were given as arguments to the {@link     * #toString(int, int)} method.     *     * @param   i   an integer to be converted.     * @return  a string representation of the argument in base&nbsp;10.     */    public static String toString(int i) {        switch(i) {            case Integer.MIN_VALUE: return "-2147483648";            case -3: return "-3";            case -2: return "-2";            case -1: return "-1";            case 0: return "0";            case 1: return "1";            case 2: return "2";            case 3: return "3";            case 4: return "4";            case 5: return "5";            case 6: return "6";            case 7: return "7";            case 8: return "8";            case 9: return "9";            case 10: return "10";        }        char[] buf = (char[])(perThreadBuffer.get());        int charPos = getChars(i, buf);        return new String(buf, charPos, 12 - charPos);    }    // Per-thread buffer for string/stringbuffer conversion    private static ThreadLocal perThreadBuffer = new ThreadLocal() {        protected synchronized Object initialValue() {            return new char[12];        }    };    private static int getChars(int i, char[] buf) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -