String的equals方法和==

时间:2023-03-08 20:56:18

  String类的对象是字符串常量,一切看起来改变了String对象的操作,其实只是改变了字符串引用变量所引用的字符串罢了。

  Java中的字符串存放在一个公共的存储池中,引用指向存储池中相应的位置,编译器可以让字符串共享,即两个不同的引用,可以指向同一个字符串常量,但该字符串的物理存储实际只有一份。

  判断两个字符串是否相等,一定要使用equals方法。“==”只能判断两个引用是否指向同一个字符串,在不同的物理存储位置也可以存储相同的字符串。

  实际上,只有字符串常量是共享的,而+或substring等操作产生的结果并不是共享的。(不绝对)

 String s="people";
 String t="people";
 char c[]={'p','e','o','p','l','e'};
 System.out.println(s=="pe"+"o"+"ple");  //true
 System.out.println(t.equals(c));    //false
 System.out.println(t.equals(new String("people")));  //true

  总之,不要使用“==”来判断字符串的相等性,以免出错。