Java ==: String Intern and Integer Cache

Integer int ==

public void testIntegerCache() {
  Integer i = 123;
  Integer j = 123;
  
  assertTrue(i == j);
  
  Integer heapK = new Integer(123);
  assertFalse(i == heapK);
  // heapK is auto-unboxed to the primitive value 123
  assertTrue(123 == heapK);
  
  // when value is beteween [-128, 127], java returns from its constant cache
  assertTrue(Integer.valueOf("123") == Integer.valueOf("123"));
  
  Integer cacheL = Integer.valueOf("123");
  assertTrue(i == cacheL);
}

Integer and Long cache numbers between -128 and 127.
public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
String ==
public void testStringIntern() {
  String a = "123";
  String b = "123";
  
  // There is only one 123, stored in java string constant pool.
  assertTrue(a == b);
  
  String heapC = new String("123");
  assertFalse(a == heapC);
  
  String internD = new String("123").intern();
  assertTrue(a == internD);
  
  // Special case
  assertTrue(String.valueOf(Integer.MIN_VALUE) == String
      .valueOf(Integer.MIN_VALUE));
  assertFalse(String.valueOf(Integer.MAX_VALUE) == String
      .valueOf(Integer.MAX_VALUE));
}
Boolean boolean ==
public void testBoolean() {
  boolean a = true;
  Boolean b = new Boolean(true);
  // auto-unbox, here Boolean b is auto-unboxed to the primitive boolean true.
  assertTrue(a == b);
  
  Boolean c = Boolean.valueOf("1");
  // different object
  assertFalse(b == c);
  
  // Boolean.valueOf actually returns one of two static final instance: TRUE,
  // FALSE
  Boolean d = Boolean.valueOf("1");
  assertTrue(c == d);
}


Post a Comment

Labels

Java (159) Lucene-Solr (111) Interview (61) All (58) J2SE (53) Algorithm (45) Soft Skills (37) Eclipse (33) Code Example (31) Linux (24) JavaScript (23) Spring (22) Windows (22) Web Development (20) Nutch2 (18) Tools (18) Bugs (17) Debug (16) Defects (14) Text Mining (14) J2EE (13) Network (13) Troubleshooting (13) PowerShell (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) Problem Solving (9) UIMA (9) html (9) Http Client (8) Maven (8) Security (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) ANT (6) Coding Skills (6) Database (6) Scala (6) Shell (6) css (6) Algorithm Series (5) Cache (5) Dynamic Languages (5) IDE (5) Lesson Learned (5) Programmer Skills (5) System Design (5) Tips (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Python (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts