This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Patch: Locale optimization
- From: Anthony Green <green at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: 30 Oct 2002 16:39:03 -0800
- Subject: 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);
}