Remove redundant calls of toString()

Jim Graham james.graham at oracle.com
Mon Apr 28 22:43:17 UTC 2014


We refer to these strings as constants in many places.  If you have:

class Foo {
     static final String bar = "<really long string>";
}

class Blah {
     // uses Foo.bar
}

Then Blah will incorporate that string by content, not by reference.  I 
don't know why this is done this way, but Strings are special in that 
static final versions of them are included by value just the way that 
static final primitive types are.  As a result, we had huge duplications 
of these strings all over the place.  But, this only happens when you 
initialize it to a constant "..." string.  If it is the result of a 
method call (or probably a calculation), then it ends up being treated 
like any static final object and is included by reference.  Thus, 
appending .toString(); to the "..." constant foils the "include by 
value" processing in the compiler...

				...jim

On 4/28/14 2:47 PM, Phil Race wrote:
> I am quite sure that you are right that these were deliberate so
> I am adding Jim who was the author of all of the 2d ones to explain the
> intent.
>
> BTW Otávio, changes in 2D code like this should not slip by on the
> core-libs list.
> It ought to go to 2d-dev.
>
> -phil.
>
> On 4/28/2014 9:24 AM, Louis Wasserman wrote:
>> -    public final static String methodSignature =
>> "DrawGlyphList(...)".toString();
>> +    public final static String methodSignature = "DrawGlyphList(...)";
>>
>> I conjecture that this, and other similar examples, are to avoid
>> having the
>> string be a compile-time constant that can be inlined into other files.
>>   Has anyone checked that there aren't any issues arising from
>> changing this?
>>
>>
>>
>>
>>
>
> n 4/27/2014 6:15 AM, Otávio Gonçalves de Santana wrote:
>> There is an issue that was opened to remove redundant calls of toString()
>> on String objects. [1]
>> I went deep on all JVM sources and I found all, 32 changes.
>>
>>
>> [1]https://bugs.openjdk.java.net/browse/JDK-8015470
>>
>> diff -r e323c74edabd
>> src/share/classes/javax/swing/text/html/FormView.java
>> --- a/src/share/classes/javax/swing/text/html/FormView.java Wed Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/javax/swing/text/html/FormView.java Sat Apr 26
>> 01:40:27 2014 -0300
>> @@ -478,7 +478,7 @@
>>                                           base.getPort(), base.getFile())
>>                   : new URL(base, action);
>>               if (!isPostMethod) {
>> -                String query = data.toString();
>> +                String query = data;
>>                   actionURL = new URL(actionURL + "?" + query);
>>               }
>>           } catch (MalformedURLException e) {
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/Blit.java
>> --- a/src/share/classes/sun/java2d/loops/Blit.java Wed Apr 23 11:35:40
>> 2014
>> -0700
>> +++ b/src/share/classes/sun/java2d/loops/Blit.java Sat Apr 26 01:40:27
>> 2014
>> -0300
>> @@ -50,7 +50,7 @@
>>
>>   public class Blit extends GraphicsPrimitive
>>   {
>> -    public static final String methodSignature = "Blit(...)".toString();
>> +    public static final String methodSignature = "Blit(...)";
>>
>>       public static final int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/BlitBg.java
>> --- a/src/share/classes/sun/java2d/loops/BlitBg.java Wed Apr 23 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/BlitBg.java Sat Apr 26 01:40:27
>> 2014 -0300
>> @@ -54,7 +54,7 @@
>>    */
>>   public class BlitBg extends GraphicsPrimitive
>>   {
>> -    public static final String methodSignature =
>> "BlitBg(...)".toString();
>> +    public static final String methodSignature = "BlitBg(...)";
>>
>>       public static final int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd
>> src/share/classes/sun/java2d/loops/DrawGlyphList.java
>> --- a/src/share/classes/sun/java2d/loops/DrawGlyphList.java Wed Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/DrawGlyphList.java Sat Apr 26
>> 01:40:27 2014 -0300
>> @@ -39,7 +39,7 @@
>>    */
>>   public class DrawGlyphList extends GraphicsPrimitive {
>>
>> -    public final static String methodSignature =
>> "DrawGlyphList(...)".toString();
>> +    public final static String methodSignature = "DrawGlyphList(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd
>> src/share/classes/sun/java2d/loops/DrawGlyphListAA.java
>> --- a/src/share/classes/sun/java2d/loops/DrawGlyphListAA.java Wed Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/DrawGlyphListAA.java Sat Apr 26
>> 01:40:27 2014 -0300
>> @@ -39,7 +39,7 @@
>>    */
>>   public class DrawGlyphListAA extends GraphicsPrimitive {
>>
>> -    public final static String methodSignature =
>> "DrawGlyphListAA(...)".toString();
>> +    public final static String methodSignature = "DrawGlyphListAA(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd
>> src/share/classes/sun/java2d/loops/DrawGlyphListLCD.java
>> --- a/src/share/classes/sun/java2d/loops/DrawGlyphListLCD.java Wed Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/DrawGlyphListLCD.java Sat Apr 26
>> 01:40:27 2014 -0300
>> @@ -40,7 +40,7 @@
>>   public class DrawGlyphListLCD extends GraphicsPrimitive {
>>
>>       public final static String
>> -        methodSignature = "DrawGlyphListLCD(...)".toString();
>> +        methodSignature = "DrawGlyphListLCD(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/DrawLine.java
>> --- a/src/share/classes/sun/java2d/loops/DrawLine.java Wed Apr 23
>> 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/DrawLine.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -44,7 +44,7 @@
>>    */
>>   public class DrawLine extends GraphicsPrimitive
>>   {
>> -    public final static String methodSignature =
>> "DrawLine(...)".toString();
>> +    public final static String methodSignature = "DrawLine(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd
>> src/share/classes/sun/java2d/loops/DrawParallelogram.java
>> --- a/src/share/classes/sun/java2d/loops/DrawParallelogram.java Wed
>> Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/DrawParallelogram.java Sat
>> Apr 26
>> 01:40:27 2014 -0300
>> @@ -43,7 +43,7 @@
>>   public class DrawParallelogram extends GraphicsPrimitive
>>   {
>>       public final static String methodSignature =
>> -        "DrawParallelogram(...)".toString();
>> +        "DrawParallelogram(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/DrawPath.java
>> --- a/src/share/classes/sun/java2d/loops/DrawPath.java Wed Apr 23
>> 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/DrawPath.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -39,7 +39,7 @@
>>   public class DrawPath extends GraphicsPrimitive {
>>
>>       public final static String methodSignature =
>> -        "DrawPath(...)".toString();
>> +        "DrawPath(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/DrawPolygons.java
>> --- a/src/share/classes/sun/java2d/loops/DrawPolygons.java Wed Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/DrawPolygons.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -41,7 +41,7 @@
>>    */
>>   public class DrawPolygons extends GraphicsPrimitive
>>   {
>> -    public final static String methodSignature =
>> "DrawPolygons(...)".toString();
>> +    public final static String methodSignature = "DrawPolygons(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/DrawRect.java
>> --- a/src/share/classes/sun/java2d/loops/DrawRect.java Wed Apr 23
>> 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/DrawRect.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -44,7 +44,7 @@
>>    */
>>   public class DrawRect extends GraphicsPrimitive
>>   {
>> -    public final static String methodSignature =
>> "DrawRect(...)".toString();
>> +    public final static String methodSignature = "DrawRect(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd
>> src/share/classes/sun/java2d/loops/FillParallelogram.java
>> --- a/src/share/classes/sun/java2d/loops/FillParallelogram.java Wed
>> Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/FillParallelogram.java Sat
>> Apr 26
>> 01:40:27 2014 -0300
>> @@ -41,7 +41,7 @@
>>   public class FillParallelogram extends GraphicsPrimitive
>>   {
>>       public final static String methodSignature =
>> -        "FillParallelogram(...)".toString();
>> +        "FillParallelogram(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/FillPath.java
>> --- a/src/share/classes/sun/java2d/loops/FillPath.java Wed Apr 23
>> 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/FillPath.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -39,7 +39,7 @@
>>   public class FillPath extends GraphicsPrimitive {
>>
>>       public final static String methodSignature =
>> -        "FillPath(...)".toString();
>> +        "FillPath(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/FillRect.java
>> --- a/src/share/classes/sun/java2d/loops/FillRect.java Wed Apr 23
>> 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/FillRect.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -44,7 +44,7 @@
>>    */
>>   public class FillRect extends GraphicsPrimitive
>>   {
>> -    public final static String methodSignature =
>> "FillRect(...)".toString();
>> +    public final static String methodSignature = "FillRect(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/FillSpans.java
>> --- a/src/share/classes/sun/java2d/loops/FillSpans.java Wed Apr 23
>> 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/FillSpans.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -45,7 +45,7 @@
>>    */
>>   public class FillSpans extends GraphicsPrimitive
>>   {
>> -    public final static String methodSignature =
>> "FillSpans(...)".toString();
>> +    public final static String methodSignature = "FillSpans(...)";
>>
>>       public final static int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/MaskBlit.java
>> --- a/src/share/classes/sun/java2d/loops/MaskBlit.java Wed Apr 23
>> 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/MaskBlit.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -48,7 +48,7 @@
>>
>>   public class MaskBlit extends GraphicsPrimitive
>>   {
>> -    public static final String methodSignature =
>> "MaskBlit(...)".toString();
>> +    public static final String methodSignature = "MaskBlit(...)";
>>
>>       public static final int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/MaskFill.java
>> --- a/src/share/classes/sun/java2d/loops/MaskFill.java Wed Apr 23
>> 11:35:40
>> 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/MaskFill.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -50,11 +50,11 @@
>>    */
>>   public class MaskFill extends GraphicsPrimitive
>>   {
>> -    public static final String methodSignature =
>> "MaskFill(...)".toString();
>> +    public static final String methodSignature = "MaskFill(...)";
>>       public static final String fillPgramSignature =
>> -        "FillAAPgram(...)".toString();
>> +        "FillAAPgram(...)";
>>       public static final String drawPgramSignature =
>> -        "DrawAAPgram(...)".toString();
>> +        "DrawAAPgram(...)";
>>
>>       public static final int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd src/share/classes/sun/java2d/loops/ScaledBlit.java
>> --- a/src/share/classes/sun/java2d/loops/ScaledBlit.java Wed Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/ScaledBlit.java Sat Apr 26
>> 01:40:27
>> 2014 -0300
>> @@ -45,7 +45,7 @@
>>
>>   public class ScaledBlit extends GraphicsPrimitive
>>   {
>> -    public static final String methodSignature =
>> "ScaledBlit(...)".toString();
>> +    public static final String methodSignature = "ScaledBlit(...)";
>>
>>       public static final int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd
>> src/share/classes/sun/java2d/loops/TransformBlit.java
>> --- a/src/share/classes/sun/java2d/loops/TransformBlit.java Wed Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/TransformBlit.java Sat Apr 26
>> 01:40:27 2014 -0300
>> @@ -47,7 +47,7 @@
>>   public class TransformBlit extends GraphicsPrimitive
>>   {
>>       public static final String methodSignature =
>> -        "TransformBlit(...)".toString();
>> +        "TransformBlit(...)";
>>
>>       public static final int primTypeID = makePrimTypeID();
>>
>> diff -r e323c74edabd
>> src/share/classes/sun/java2d/loops/TransformHelper.java
>> --- a/src/share/classes/sun/java2d/loops/TransformHelper.java Wed Apr 23
>> 11:35:40 2014 -0700
>> +++ b/src/share/classes/sun/java2d/loops/TransformHelper.java Sat Apr 26
>> 01:40:27 2014 -0300
>> @@ -46,7 +46,7 @@
>>   public class TransformHelper extends GraphicsPrimitive
>>   {
>>       public static final String methodSignature =
>> -        "TransformHelper(...)".toString();
>> +        "TransformHelper(...)";
>>
>>       public static final int primTypeID = makePrimTypeID();
>>
>>
>



More information about the core-libs-dev mailing list