"=="和equals区别

 

1.equals比的是双方对象中的内容是否相等.

2."=="比较时分两种情况

(1)如果比较的双方是java的基本数据类型(char,byte,short,int,long,float,double,boolean),那么'=='比较的依据是双方的直是否相等.

int i=2;

int k=2;

System.out.println(i==k); //返回ture

String str1 = "abc";

String str2 = "abc";      

//以上两个语句都创建对象.引号内包含文本是String类特有创建对象的方式.但是"=="返回的结果是true,为什么呢?因为在JVM内,存在字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率.字符串池由String类维护,我们可以调用intern()方法来访问字符串池。当运用引号内包含文本创建对象时,所创建的对象是加入到字符串池里面的.如果要创建下一个字符串对象,JVM首先会到字符串池中寻找,是否存在对应的字符串对象,如果存在,则返回一个己存在对象的对象的引用给要创建的对象引用.如果不存在,才会创建一个新的对象,并返回一个新对象的对象引用给要创建的对象引用.以上这段话理解起来可能比较拗口.用代码理解就是str2和str1是两个对象引用,并指向了同一个对象.所以'=='返回的是true.
重点:只有引号内包含文本创建对象才会将创建的对象放入到字符串池. String str = new String("abc")这种方法创建的字符串对象是不放入到字符串池的.所以,引号内包含文本创建对象的性能要比后来那种方法创建字符串对象的性能要好.

String str3 = str1+str2;   //这种创建方式是不放入字符串池的.

String str4 = str1+"cd";   //这种创建方式是不放入字符串池的.

String str5 = "ab"+str2;   //这种创建方式是不放入字符串池的.

String str6 = "ab"+"cd"   //这种创建方式是放入字符串池的.这种情况实际上是创建了1个对象,abcd"1个对象

System.out.println(str1==str2); //返回ture

System.out.println(str1.equals(str2)); //返回ture

(2)如果比较的双方是对象的变量类型,那么'=='比较的依据是双方的对象的引用是否是指向同一个对象.

   Date d1 = new Date();
   try
   {
    Thread.sleep(500);
   }
   catch(Exception e)
   {
    e.printStackTrace();
   }
   Date d2 = new Date();
   Date d3 = d1;
   System.out.println(d1==d2); //返回false
   System.out.println(d1==d3); //返回true
   System.out.println(d1.equals(d2)); //返回false
   System.out.println(d1.equals(d3));//返回true

如果没有线程休息,   System.out.println(d1.equals(d2));返回ture,因为在一个时间点内创建了两个Date对象.也就是说两个对象代表的时间是相等的.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值