==和equals()的区别

本文详细介绍了Java中‘==’运算符和equals()方法的区别。‘==’用于比较基本类型变量的值或引用类型变量的内存地址,而equals()默认比较对象地址,但被String等类重写后比较内容。讨论了String对象的特殊情况,包括对象创建和字符串池的概念,并通过实例展示了不同情况下的比较结果。

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池中是否存在,池中存在就是相同的对象,池中没有就在池中创建一个新对象。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值