[ 
https://issues.apache.org/jira/browse/LUCENE-8047?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16247757#comment-16247757
 ] 

Uwe Schindler commented on LUCENE-8047:
---------------------------------------

I agree with Robert. The strings here are all final constants and there is no 
need to use equals - in fact the reference comparison is wanted here. The token 
type is used like an enum and should always only be the constants given in the 
tokenizer/filter. The question/issue we have seen here was raised quite often, 
because some code quality tools complain. But Lucene is very low-level and 
performance-critatical code, so the developers are aware of the consequences. 
In earlier versions (before 4.0) this pattern was much more often used for 
"field names", as this was a ongoing comparison (did field name change while 
iterating over terms). Lucene code contains more programming-antipatterns that 
should be fixed in high level projects (like business code) but are done in 
Lucene for performance reasons! 

My last note about this one: Using equals wont make it much worse nowadays, as 
the String.equals() method early exists if the references are equal.

> Comparison of String objects using == or !=
> -------------------------------------------
>
>                 Key: LUCENE-8047
>                 URL: https://issues.apache.org/jira/browse/LUCENE-8047
>             Project: Lucene - Core
>          Issue Type: Improvement
>          Components: modules/analysis
>    Affects Versions: 7.0.1
>         Environment: Ubuntu 14.04.5 LTS
>            Reporter: song
>            Priority: Minor
>              Labels: performance
>
> My tool has scanned the whole codebase of Lucene and found there are eight 
> practice issues of string comparison, in which strings are compared by using 
> ==/!= instead of equals( ).
> analysis/common/src/java/org/apache/lucene/analysis/hunspell/Dictionary.java
> {code:java}
> conditionPattern == SUFFIX_CONDITION_REGEX_PATTERN
> {code}
> analysis/common/src/java/org/apache/lucene/analysis/cjk/CJKBigramFilter.java
> {code:java}
>   if (type == doHan || type == doHiragana || type == doKatakana || type == 
> doHangul) {
> {code}
> analysis/common/src/java/org/apache/lucene/analysis/standard/ClassicFilter.java
> {code:java}
>  if (type == APOSTROPHE_TYPE &&...){
>  } else if (type == ACRONYM_TYPE) {  
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to