Java 值相同的String使用“==“关系运算符结果为false

  • Post author:
  • Post category:java


原因:

在Java中,value值相同的两个使用new创建的字符串使用”==”关系运算符结果为false。

	public static void main(String[] args) {
		String s1 = new String("CSDN");
		String s2 = new String("CSDN");
		
		if(s1 == s2) {
			System.out.println("true");
		}
		else {
			System.out.println("false");
		}
	}

以上代码运行结果为false;

	public static void main(String[] args) {
		String s1 = "CSDN";
		String s2 = "CSDN";
		
		if(s1 == s2) {
			System.out.println("true");
		}
		else {
			System.out.println("false");
		}
	}

以上代码运行结果为true;


Java String 类 | 菜鸟教程 (runoob.com)

Java中用String直接创建的字符串存储在公共池中,而使用new方法创建的字符串存储在堆中。

解决:

使用String.equals()方法比较value值:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
    public static void main(String[] args) {
        String s1 = new String("CSDN");
        String s2 = new String("CSDN");
        
        if(s1.equals(s2)) {
            System.out.println("true");
        }
        else {
            System.out.println("false");
        }
    }

以上代码运行结果为true;



版权声明:本文为awsl_tsl原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。