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(a.equals(b));//true
System.out.println(c==d);//false
System.out.println(c.equals(d));//true
System.out.println(a.equals(d));//true
System.out.println(a==d);//false
这里解释一下为什么:
==操作符专门用来比较两个变量的值是否相等,Equals方法是用于比较两个独立的对象的内容是否相同
Java虚拟机里有一个区域叫做方法区,方法区有一个常量区,当你定义String a="abc";时,虚拟机认为"abc"是常量,放在常量区。下次再定义 String b="abc";时,虚拟机并不创建任何东西,而是连到刚才常量区的"abc",所以不管是equals和==都是true.因为地址和值都相等。
另外还有一个区域叫做堆,如果定义String c=newString("abc");虚拟机会把创建对象放到堆里,再定义 String d=new String("abc");时会在堆里放两个对象。所以==是false,equals是true.因为两个对象地址不同内容相同。而a.equals(d)为true,a==d为false也是因为地址不同内容相同。
以上:
1、如果测试两个简单类型的数值是否相等,则一定要用“==”来比较;
2、如果要比较两个引用变量对象的值是否相等,则要用对象的equals()方法进行比较;
3、如果需要比较两个引用变量是否指向同一对象,则使用“==”来进行比较;
4、对于自定义的类,应该根据情况覆盖其父类或Object类中的equals()方法。
429

被折叠的 条评论
为什么被折叠?



