[dna-commits] DNA SVN: r594 - in trunk/dna-common/src/main/java/org/jboss/dna/common: util and 1 other directory.

Randall Hauch rhauch at redhat.com
Tue Oct 28 16:26:23 EDT 2008


Per the Java Language Spec (sect 3.10.5), at http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html 
.  Bold is mine:

- Literal strings within the same class (§8) in the same package (§7)  
represent references to the same String object (§4.3.1).
- Literal strings within different classes in the same package  
represent references to the same String object.
- Literal strings within different classes in different packages  
likewise represent references to the same String object.
- Strings computed by constant expressions (§15.28) are computed at  
compile time and then treated as if they were literals.
- Strings computed at run time are newly created and therefore distinct.
- The result of explicitly interning a computed string is the same  
string as any pre-existing literal string with the same contents.

On Oct 28, 2008, at 3:16 PM, Randall Hauch wrote:

> I don't believe you're right, at least for string literals available  
> at compile-time.  Those are all interned into the same bucket.
>
> On Oct 28, 2008, at 2:38 PM, John Verhaeg wrote:
>
>> I believe your comments below are not entirely accurate.  There is  
>> both a performance and footprint benefit to having such a constant,  
>> albeit small in either case.  Java ensures a single entry for an  
>> empty string exists in a class's literal pool within the bytecode,  
>> but I don't know of any other internalization or special handling  
>> for this.  Each class that uses the empty string would have its own  
>> bytecode to represent the literal empty string.  The constant  
>> avoids both this and the instantiation of said string whenever the  
>> class itself is instantiated.
>>
>> I'd also argue that the EMPTY_STRING constant is more readable,  
>> although longer to type, than "".  :-P
>>
>> John Verhaeg
>> Red Hat, Inc.
>> (314) 336-2950
>>
>> ----- dna-commits at lists.jboss.org wrote:
>> | Author: rhauch
>> | Date: 2008-10-28 15:21:10 -0400 (Tue, 28 Oct 2008)
>> | New Revision: 594
>> |
>> | Modified:
>> |    trunk/dna-common/src/main/java/org/jboss/dna/common/monitor/ 
>> SimpleProgressMonitor.java
>> |    trunk/dna-common/src/main/java/org/jboss/dna/common/util/ 
>> StringUtil.java
>> | Log:
>> | Removed the static constant for an empty string, as Java always  
>> interns all string literals such as "".  So, there is no  
>> performance or efficiency benefit, and its simpler (if not shorter)  
>> to use "" rather than a constant.
>> |
>> |
>> | Modified: trunk/dna-common/src/main/java/org/jboss/dna/common/ 
>> monitor/SimpleProgressMonitor.java
>> | ===================================================================
>> | --- trunk/dna-common/src/main/java/org/jboss/dna/common/monitor/ 
>> SimpleProgressMonitor.java        2008-10-28 17:55:47 UTC (rev 593)
>> | +++ trunk/dna-common/src/main/java/org/jboss/dna/common/monitor/ 
>> SimpleProgressMonitor.java        2008-10-28 19:21:10 UTC (rev 594)
>> | @@ -32,7 +32,6 @@
>> |  import org.jboss.dna.common.collection.ThreadSafeProblems;
>> |  import org.jboss.dna.common.i18n.I18n;
>> |  import org.jboss.dna.common.util.CheckArg;
>> | -import org.jboss.dna.common.util.StringUtil;
>> |
>> |  /**
>> |   * A basic progress monitor.
>> | @@ -64,8 +63,8 @@
>> |
>> |      public SimpleProgressMonitor( String activityName,
>> |                                    ProgressMonitor  
>> parentProgressMonitor ) {
>> | -        this.activityName = activityName == null ?  
>> StringUtil.EMPTY_STRING : activityName.trim();
>> | -        this.parentActivityName = parentProgressMonitor ==  
>> null ? StringUtil.EMPTY_STRING :  
>> parentProgressMonitor.getActivityName();
>> | +        this.activityName = activityName == null ? "" :  
>> activityName.trim();
>> | +        this.parentActivityName = parentProgressMonitor ==  
>> null ? "" : parentProgressMonitor.getActivityName();
>> |          this.taskName = null;
>> |          this.taskNameParams = null;
>> |      }
>> |
>> | Modified: trunk/dna-common/src/main/java/org/jboss/dna/common/ 
>> util/StringUtil.java
>> | ===================================================================
>> | --- trunk/dna-common/src/main/java/org/jboss/dna/common/util/ 
>> StringUtil.java        2008-10-28 17:55:47 UTC (rev 593)
>> | +++ trunk/dna-common/src/main/java/org/jboss/dna/common/util/ 
>> StringUtil.java        2008-10-28 19:21:10 UTC (rev 594)
>> | @@ -45,7 +45,6 @@
>> |   */
>> |  public class StringUtil {
>> |
>> | -    public static final String EMPTY_STRING = "";
>> |      public static final String[] EMPTY_STRING_ARRAY = new  
>> String[0];
>> |      private static final Pattern NORMALIZE_PATTERN =  
>> Pattern.compile("\\s+");
>> |      private static final Pattern PARAMETER_COUNT_PATTERN =  
>> Pattern.compile("\\{(\\d+)\\}");
>> |
>> | _______________________________________________
>> | dna-commits mailing list
>> | dna-commits at lists.jboss.org
>> | https://lists.jboss.org/mailman/listinfo/dna-commits
>> |
>> _______________________________________________
>> dna-commits mailing list
>> dna-commits at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/dna-commits
>
> _______________________________________________
> dna-commits mailing list
> dna-commits at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/dna-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/dna-commits/attachments/20081028/f20a550e/attachment.html 


More information about the dna-commits mailing list