Skip to content

Instantly share code, notes, and snippets.

@simonwoo
Last active August 29, 2015 14:19
Show Gist options
  • Select an option

  • Save simonwoo/8164338f72adc9a06d14 to your computer and use it in GitHub Desktop.

Select an option

Save simonwoo/8164338f72adc9a06d14 to your computer and use it in GitHub Desktop.
java compare string
  1. == tests for reference equality.
  2. .equals() tests for value equality.Consequently, if you actually want to test whether two strings have the same value you should use .equals().
  • These two have the same value new String("test").equals("test") --> true

  • but they are not the same object new String("test") == "test" --> false

  • neither are these new String("test") == new String("test") --> false

  • ... but these are because literals are interned by

  • the compiler and thus refer to the same object "test" == "test" --> true

  • concatenation of string literals happens at compile time, also resulting in the same object "test" == "te" + "st" --> true

  • but .substring() is invoked at runtime, generating distinct objects "test" == "!test".substring(1) --> false

  • interned strings can also be recalled by calling .intern() "test" == "!test".substring(1).intern() --> true

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment