Home  >  Article  >  Java  >  Comparative sharing about String.equals and == in Java

Comparative sharing about String.equals and == in Java

黄舟
黄舟Original
2017-08-20 09:36:371469browse

This article mainly introduces relevant information about the comparison between String.equals and == in java. Friends who need it can refer to it

Comparison between String.equals and == in java

I have been learning Java for a while, but last night I was suddenly upset by "asd"==getpara("password"): it is true that many things in JAVA are completely different from the languages ​​I have been exposed to before. , such as the simplest new String("asd") !=new String ("asd").

1 The simplest program:

public class A {
  public static void main(String args[]) {
    String s1 = "Hello";
    String s2 = "Hello";
    System.out.println(s1 == s2);
  }
}

Definitely many people say, output true, it does output true, s1 and s2 refer to the same thing. But if this program were written in a different way, it would definitely be different.

2 First variation:

##

public class A {
  public static void main(String args[]) {
    String s1 = "Hello";
    String s2 = new String("Hello");
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
  }
}

Or:

public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s2 = new String("Hello");
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
  }
}

Then the result is a bit uncertain. Some people have bad ideas. If they are taken separately, at least one of them will definitely not be equal.

The results of these two programs are false true. The reason is very simple. JAVA is a basically completely object-oriented language. s1 == s2 determines its reference (equivalent to memory address and pointer). equals uses the object's own method to determine whether the values ​​are equal.

In the following expression:

String s1 = "Hello";
String s2 = new String("Hello");

The JVM gets two different messages:


1. I want to create a "Hello" string.

2. I want to create a new "Hello" string, not the same as the original one.

So, s1 != s2.

3 The second variation:

Sequential arrangement:


public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s2 = new String("Hello");
    String s3 = "Hello";
    s1=s1.intern();
    s2=s2.intern();
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    System.out.println(s3 == s2);
    System.out.println(s3.equals(s2));
  }
}

Shuffle the order:


public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s3 = "Hello";
    s1=s1.intern();
    String s2 = new String("Hello");
    s2=s2.intern();
    //也可以String s2 = new String("Hello").intern();
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    System.out.println(s3 == s2);
    System.out.println(s3.equals(s2));
  }
}

Then this time it should be It’s very clear =


Two objects, but with some shy things added in between, so the answer must be true true true true.


So what exactly is intern?

4 Intern function:

When calling the intern method, if the pool already contains a string equal to this String object (the object is represented by equals(Object ) method), the string in the pool is returned.


Otherwise, add this String object to the pool and return a reference to this String object.

Applicable situations of intern: situations where multiple identical large strings appear at the same time, such as the design of a message queue where multiple identical messages may appear.


The above is the detailed content of Comparative sharing about String.equals and == in Java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn