This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: Locale optimization


Locales are used for hashtable keys here and there.  Interning some of
the string fields should make a nice difference on Locale.equals().

I've also submitted this to GNU Classpath.  Ok?

AG


2002-10-30  Anthony Green  <green@redhat.com>

	* java/util/Locale.java (Locale): Intern String fields.
	(equals): Compare String references, not contents.
	(getISO3Language): Ditto.
	(getISO3Country): Ditto.

Index: java/util/Locale.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/util/Locale.java,v
retrieving revision 1.10
diff -2 -c -p -r1.10 Locale.java
*** java/util/Locale.java	9 May 2002 23:41:41 -0000	1.10
--- java/util/Locale.java	31 Oct 2002 01:33:19 -0000
*************** public final class Locale implements Ser
*** 232,238 ****
      if (defaultLocale != null)
        {
!         language = convertLanguage(language);
!         country = country.toUpperCase();
!         variant = variant.toUpperCase();
        }
      this.language = language;
--- 232,238 ----
      if (defaultLocale != null)
        {
!         language = convertLanguage(language).intern();
!         country = country.toUpperCase().intern();
!         variant = variant.toUpperCase().intern();
        }
      this.language = language;
*************** public final class Locale implements Ser
*** 435,439 ****
    public String getISO3Language()
    {
!     if ("".equals(language))
        return "";
      int index
--- 435,439 ----
    public String getISO3Language()
    {
!     if (language == "")
        return "";
      int index
*************** public final class Locale implements Ser
*** 471,475 ****
    public String getISO3Country()
    {
!     if ("".equals(country))
        return "";
      int index
--- 471,475 ----
    public String getISO3Country()
    {
!     if (country == "")
        return "";
      int index
*************** public final class Locale implements Ser
*** 722,731 ****
    public boolean equals(Object obj)
    {
      if (! (obj instanceof Locale))
        return false;
      Locale l = (Locale) obj;
!     return (language.equals(l.language)
!             && country.equals(l.country)
!             && variant.equals(l.variant));
    }
  
--- 722,738 ----
    public boolean equals(Object obj)
    {
+     if (this == obj)
+       return true;
      if (! (obj instanceof Locale))
        return false;
      Locale l = (Locale) obj;
! 
!     // ??? We might also want to add:
!     //        hashCode() == l.hashCode()
!     // But this is a synchronized method.  Is the overhead worth it?
!     // Measure this to make a decision.
!     return (language == l.language
!             && country == l.country
!             && variant == l.variant);
    }
  



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]