==和equals()的区别

1、==
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址。

2、equals()
 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

注意:基本数据类型是作为常量在方法区中的常量池里面以HashSet策略存储起来的,对于字符串也是相同的方式,在常量池中,一个常量只会对应一个地址,这样定义的数据都只会存储一个地址,所有的引用都是指向的同一块地址,因此基本数据类型和String常量是可以直接通过“==’来比较。

String对象的问题
String对equals方法进行了重写。
它首先判断的是两个对象的引用是否指向同一内存地址,是的话就返回true ,否则继续往下走,去判断是否为String类的对象,然后比较两个字符串的长度和内存,当都相等的时候就返回true ,否则返回false。

1.String作为一个对象来使用:
例子一:对象不同,内容相同,"=="返回false,equals返回true

String s1 = new String("eclipse");
String s2 = new String("eclipse");
System.out.println(s1==s2);            //false
System.out.println(s1.equals(s2));    //true

例子二:同一对象,"=="和equals结果相同

String s1 = new String("eclipse");
String s2 = s1;
System.out.println(s1==s2);            //true
System.out.println(s1.equals(s2));    //true

2.String作为一个基本类型来使用
如果值不相同,对象就不相同,所以"==" 和equals结果一样

String s1 = "java";
String s2 = "java";
System.out.println(s1==s2);            //true
System.out.println(s1.equals(s2));    //true

String池:
String是final修改的类型,不可改变的,Java存在字符串池的概念,例如new String(“xyz”);首先在String池中创建一个对象“xyz”,由于使用 NEW 来创建对象,会分配新的地址空间,将String池的内容复制过去。如果创建的String对象在String池中不存在,会在String池中创建该对象。

简单的说法:
1.如果使用new创建字符串对象,就是创建的新对象。
2.如果直接指定或者是字符串串联(str1=str2这种)来创建string对象,则会检查string池中是否存在,池中存在就是相同的对象,池中没有就在池中创建一个新对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值