Hi Rémi,

Sure this examples will not be affected, but we have to concern about other applications which are probably using this constructor. Could you suggest such applications?

On 17.12.2014 21:49, Remi Forax wrote:

On 12/17/2014 11:22 AM, Lev Priima wrote:
Hi,

Please review space optimization in no args String constructor. Originally, it was already rejected once by suggestion in http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-May/010300.html w/o formal justification of pros and contras. And enhancement was requested again by Nathan Reynolds.

Issue: https://bugs.openjdk.java.net/browse/JDK-8067471
Patch: http://cr.openjdk.java.net/~lpriima/8067471/webrev.00/


Hi Lev,
new String() is usually used by beginners that forget or doesn't know that you they can use "" instead.

There is only one legit usage when you want a NullObject for a String *and* you don't want to have a shared reference (something visible by everybody).
One legit usage of which code?
You find 4 occurences of new String() in the JDK,
> jdk.httpserver/share/classes/sun/net/httpserver/Request.java:200: v = new String(); > java.base/share/classes/sun/net/www/MessageHeader.java:508: v = new String(); > java.base/share/classes/java/lang/invoke/MethodHandles.java:829:MethodType MT_newString = methodType(void.class); //()V for new String() > jdk.runtime/share/classes/sun/security/tools/policytool/PolicyTool.java:947: String stringEntry = new String();

For the first two, the code is very similar and "" can be used instead of new String().
The third occurence is just a comment.
just comment to review all MH libs (e.g. nashorn) for such kind of code:
import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
publicLookup().findConstructor(String.class, methodType(void.class) ).invokeExact();
and more implicit variations.
The last occurence is typically a code written by a beginner, the code use String.concat, do a kind of defensive copy on String (line 967). Again, "" can be used instead of new String().

so my suggestion is to wait to have more information from Nathan Reynolds before trying to fix something, new String() is not the only way to have a String with an empty char array.

cheers,
Rémi




--
Best Regards,
Lev

Reply via email to