Java面试总结------Java基础

**

有关"=="与equals()

**
2019/03/30
(1)对于字符串变量来说“”是比较变量本身的值(即两个对象的首地
址)。"equals()"比较字符串内容是否相同
例: String s1=“123”;
String s2=“123”;
String s3,s4;
s3=new String(“123”);
s4=new String(“123”);
s1
s2; //false 两个变量的内存地址不一样即他们指向的对象不同
s1.equals(s2) //true 两个变量所包含的内容相同

(2) StringBuffer s1=new StringBuffer(“a”);
StringBuffer s2=new StringBuffer(“a”);
s1.equals(s2); //false StringBuffer未对equals()方法进行重写,所以其是进行
地址比较

(3)对于非字符串变量来说“”和“equals”都是比较对象内存的首地址
例:
Class A{
A obj1=new A();
A obj2=new A();
obj1
obj2; //false
obj.equls(obj2); //false

                            }

(4)基本类型的比较只能通过“==”比较。基本类型用equals()比较编译无法通过

(5)基本类型的包裹类型“==”比较地址“equals”比较内容

(6)String(字符串),StringBuffer(线程安全的可变字符串序列),StringBuilder(可变字符串序列)
例:
public class TestEquals {
public static void main(String[] args) {
String s1 = “123”;
String s2 = “123”;
String s3 = “abc”;
String s4 = new String(“123”);
String s5 = new String(“123”);
String s6 = new String(“abc”);
System.out.println(s1 == s2);// true
System.out.println(s1.equals(s2));// true
System.out.println(s1 == s3);// flase
System.out.println(s1.equals(s3));// flase
System.out.println(s4 == s5);// flase
System.out.println(s4.equals(s5));// true
System.out.println(s4 == s6);// flase
System.out.println(s4.equals(s6));// flase
System.out.println(s1 == s4);// false
System.out.println(s1.equals(s4));// true
}
}
s1,s2指向字符串常量,创建对象时,在常量池中只有一个对象,因此两个引用是相同的
s4,s5创建两个对象。因此s4==s5时false。

(7)  特殊情况


          class Value {
                         	int i;
                         }
     public class TestEquips {
	public static void main(String[] args) {
	Value v1 = new Value();
	Value v2 = new Value();
	v1.i = v2.i = 100;
	System.out.println(v1.equals(v2));//     flase
	System.out.println(v1 == v2);//     false
}

}

解释:上面的例子中类Value并没有覆盖Object中的equals方法(即equals方法比较地址),
           而是继承了该方法,因此它就是被用来比较地址的,又v1和v2的所指向的对象不
           相同
发布了17 篇原创文章 · 获赞 4 · 访问量 2064

猜你喜欢

转载自blog.csdn.net/myITliveAAA/article/details/88910514