不是!
问题引入
平时用"=="或equals()
方法,一直有个疑惑:
java中==调用的是equals方法吗。或者说==这是个语法糖,底层都调用equals方法。
解析
写了些代码,做测试:
Integer a=new Integer(1);
Integer b=new Integer(2);
Object o1=new Object();
Object o2=new Object();
String str1=new String("123");
String str2=new String("123");
System.out.println(a==b);
System.out.println(str1==str2);
然后,我分别在String、Object两个类的equals方法中打断点。结果都没有进入,说明没有调用equals方法,不是语法糖。
所以,"=="就是判断两个变量的值是否相等。对于基本类型,就是直接判断两个变量的值是否相等(如1==2);对于引用(reference)类型,也是判断两个变量的值是否相等(也就是引用的值。不是对象)
因此:
String a="abc";
String b="abc";
String c=new String("abc");
String d=new String("abc");
System.out.println(a==b);//true
System.out.println(c==d);//false
a与b两个引用都指向同一个常量。c与d两个引用指向的是两个不同的变量。
至于String对象的创建,可以参考 Java中String对象创建