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的所指向的对象不
           相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值