JDK 8 code review request for 6964528: Double.toHexString(double d) String manipulation with + in an append of StringBuilder

Aleksey Shipilev aleksey.shipilev at oracle.com
Fri Feb 1 22:10:38 UTC 2013


+1. Appending char is marginally faster as well.

-Aleksey.

On 02.02.2013, at 2:07, Vitaly Davidovich <vitalyd at gmail.com> wrote:

> I'm with Louis on this one.  Since you're changing this code anyway, I
> don't see any reason to use string here.
> 
> Sent from my phone
> On Feb 1, 2013 4:45 PM, "Joe Darcy" <joe.darcy at oracle.com> wrote:
> 
>> On 02/01/2013 01:41 PM, Louis Wasserman wrote:
>> 
>>> Would appending the character 'p' instead of the string "p" make any
>>> difference?
>> 
>> Not a big enough one for me to feel compelled to look into it ;-)
>> 
>> -Joe
>> 
>> 
>>> 
>>> On Fri, Feb 1, 2013 at 1:39 PM, Joe Darcy <joe.darcy at oracle.com <mailto:
>>> joe.darcy at oracle.com>> wrote:
>>> 
>>>    Hello,
>>> 
>>>    Please review a simple refactoring fix in Double.toHexString
>>> 
>>>        6964528: Double.toHexString(double d) String manipulation with
>>>    + in an append of StringBuilder
>>>    http://cr.openjdk.java.net/~**darcy/6964528.0/<http://cr.openjdk.java.net/~darcy/6964528.0/>
>>>    <http://cr.openjdk.java.net/%**7Edarcy/6964528.0/<http://cr.openjdk.java.net/%7Edarcy/6964528.0/>
>>> 
>>>    Patch below.
>>> 
>>>    Thanks,
>>> 
>>>    -Joe
>>> 
>>>    --- old/src/share/classes/java/**lang/Double.java  2013-02-01
>>>    13:36:33.000000000 -0800
>>>    +++ new/src/share/classes/java/**lang/Double.java  2013-02-01
>>>    13:36:33.000000000 -0800
>>>    @@ -1,5 +1,5 @@
>>>     /*
>>>    - * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All
>>>    rights reserved.
>>>    + * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All
>>>    rights reserved.
>>>      * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>>      *
>>>      * This code is free software; you can redistribute it and/or
>>>    modify it
>>>    @@ -289,7 +289,7 @@
>>>                 return Double.toString(d);
>>>             else {
>>>                 // Initialized to maximum size of output.
>>>    -            StringBuffer answer = new StringBuffer(24);
>>>    +            StringBuilder answer = new StringBuilder(24);
>>> 
>>>                 if (Math.copySign(1.0, d) == -1.0)    // value is
>>>    negative,
>>>                     answer.append("-");                  // so append
>>>    sign info
>>>    @@ -300,8 +300,7 @@
>>> 
>>>                 if(d == 0.0) {
>>>                     answer.append("0.0p0");
>>>    -            }
>>>    -            else {
>>>    +            } else {
>>>                     boolean subnormal = (d < DoubleConsts.MIN_NORMAL);
>>> 
>>>                     // Isolate significand bits and OR in a
>>>    high-order bit
>>>    @@ -324,13 +323,14 @@
>>>                                   "0":
>>>     signif.replaceFirst("0{1,12}$"**, ""));
>>> 
>>>    +                answer.append("p");
>>>                     // If the value is subnormal, use the E_min exponent
>>>                     // value for double; otherwise, extract and
>>>    report d's
>>>                     // exponent (the representation of a subnormal uses
>>>                     // E_min -1).
>>>    -                answer.append("p" + (subnormal ?
>>>    -                               DoubleConsts.MIN_EXPONENT:
>>>    -                               Math.getExponent(d) ));
>>>    +                answer.append(subnormal ?
>>>    +                              DoubleConsts.MIN_EXPONENT:
>>>    +                              Math.getExponent(d));
>>>                 }
>>>                 return answer.toString();
>>>             }
>>> 
>>> 
>>> 
>>> 
>>> --
>>> Louis Wasserman
>> 
>> 



More information about the core-libs-dev mailing list