字符串比较==和equals
String a = "111"; String b = "111"; String c = new String("111"); System.out.println(a == b); System.out.println(a == c); System.out.println(a.equals(b)); System.out.println(a.equals(c));
结果:
true false true true
- "=="比较的是字符串的地址,所以第二个结果输出为false
但是第一个输出的结果是true,这就要引出java对象池的概念。
对象池:JVM底层会自动维护一个字符串的对象池,如果现在采用直接赋值的形式进行String的对象实例化,该对象会自动保存在这个对象池中。如果下次继续使用直接赋值的模式声明String对象,此时对象池若有指定内容,则直接使用;如果没有,则开辟新的堆空间将其保存在对象池中供下次使用 - "equals"比较的是内容