欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-21 12:30:40
...

**

有关"=="与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的所指向的对象不
           相同