字符串相等比较

字符串创建的方式有两大类,一种是使用字面量方式,一种是使用new方式。它们之间有些区别。

String str = "hello";

// 本质上this.value = new char[0];
String s1 = new String();
//this.value = original.value;
String s2 = new String(String original);
//this.value = Arrays.copyOf(value, value.length);
String s3 = new String(char[] a);
String s4 = new String(char[] a,int startIndex,int count);

下面来看看它们之间的区别

String s1 = "java";
String s2 = new String("php");

当用字面量方式创建字符串时,只会在字符串常量池中创建一个字符串。但是用new方式的话,会在堆空间创建String对象,也会在字符串常量池中创建字符串。

检测字符串是否相等

var s1 = "java";
var s2 = new String("java");

System.out.println(s1 == s2);  // false
System.out.println(s1.equals(s2));  // true

从上面代码,我们可以得出:在java中,比较两个字符串是否相等,需要使用equals方法,不能使用“==”比较运算符。如果不区分大小写的比较,使用equalsIgnoreCase方法。

public class Sty {
    public static void main (String [] args) {
        if ("Hello".equals("hello")) {
            System.out.println("equal");
        } else if ("Hello".equalsIgnoreCase("hello")) {
            System.out.println("equalsIgnoreCase");
        } else {
            System.out.println("neither");
        }
    }
} 

练习题

String s1 = "javaEE";
String s2 = "javaEE";
String s3 = new String("javaEE");
String s4 = new String("javaEE");

System.out.println(s1 == s2);//true
System.out.println(s1 == s3);//false
System.out.println(s1 == s4);//false
System.out.println(s3 == s4);//false