Code review request for 6628737: Specification of wrapper class valueOf static factories should require caching
Joseph D. Darcy
Joe.Darcy at Sun.COM
Thu Jul 9 01:49:54 UTC 2009
Hello.
Since JDK 5, to implement autoboxing, javac has relied on various static
factory methods in the wrapper classes to perform the caching in the
required range. While the factories said they could cache, they did not
state they would definitely cache in the required range given in JLSv3
section 5.1.7:
http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.7
Please review the patch below of my specification changes to mandate the
caching. The Boolean factory already mandates caching. (For those
interested in such things, tn parallel a ccc request has been filed to
track the specification change.)
-Joe
--- old/src/share/classes/java/lang/Byte.java 2009-07-08
18:38:11.000000000 -0700
+++ new/src/share/classes/java/lang/Byte.java 2009-07-08
18:38:11.000000000 -0700
@@ -90,8 +90,8 @@
* If a new {@code 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.
+ * significantly better space and time performance since
+ * all byte values are cached.
*
* @param b a byte value.
* @return a {@code Byte} instance representing {@code b}.
--- old/src/share/classes/java/lang/Character.java 2009-07-08
18:38:13.000000000 -0700
+++ new/src/share/classes/java/lang/Character.java 2009-07-08
18:38:13.000000000 -0700
@@ -2571,6 +2571,10 @@
* significantly better space and time performance by caching
* frequently requested values.
*
+ * This method will always cache values in the range '\u0000'
+ * to '\u007f'", inclusive, and may cache other values outside
+ * of this range.
+ *
* @param c a char value.
* @return a <tt>Character</tt> instance representing <tt>c</tt>.
* @since 1.5
--- old/src/share/classes/java/lang/Integer.java 2009-07-08
18:38:14.000000000 -0700
+++ new/src/share/classes/java/lang/Integer.java 2009-07-08
18:38:14.000000000 -0700
@@ -638,6 +638,9 @@
* to yield significantly better space and time performance by
* caching frequently requested values.
*
+ * This method will always cache values in the range -128 to 127,
+ * inclusive, and may cache other values outside of this range.
+ *
* @param i an {@code int} value.
* @return an {@code Integer} instance representing {@code i}.
* @since 1.5
--- old/src/share/classes/java/lang/Long.java 2009-07-08
18:38:16.000000000 -0700
+++ new/src/share/classes/java/lang/Long.java 2009-07-08
18:38:16.000000000 -0700
@@ -560,6 +560,11 @@
* significantly better space and time performance by caching
* frequently requested values.
*
+ * Note that unlike the {@linkplain Integer#valueOf(int)
+ * corresponding method} in the {@code Integer} class, this method
+ * is <em>not</em> required to cache values within a particular
+ * range.
+ *
* @param l a long value.
* @return a {@code Long} instance representing {@code l}.
* @since 1.5
--- old/src/share/classes/java/lang/Short.java 2009-07-08
18:38:17.000000000 -0700
+++ new/src/share/classes/java/lang/Short.java 2009-07-08
18:38:17.000000000 -0700
@@ -219,6 +219,9 @@
* significantly better space and time performance by caching
* frequently requested values.
*
+ * This method will always cache values in the range -128 to 127,
+ * inclusive, and may cache other values outside of this range.
+ *
* @param s a short value.
* @return a {@code Short} instance representing {@code s}.
* @since 1.5
More information about the core-libs-dev
mailing list