==与equals,String的equals()方法
==介绍
它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。
基本数据类型:byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。
引用数据类型:当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。
public class test {public static void main(String[] args) {int i=100;//基本数据类型int j=100;//基本数据类型Integer x=100;//引用数据类型Integer y=100;//引用数据类型Integer s=1000;Integer d=1000;Integer a=new Integer(100);//引用数据类型Integer b=new Integer(100);//引用数据类型System.out.println("i的地址"+System.identityHashCode(i));System.out.println("j的地址"+System.identityHashCode(j));System.out.println("x的地址"+System.identityHashCode(x));System.out.println("y的地址"+System.identityHashCode(y));System.out.println("a的地址"+System.identityHashCode(a));System.out.println("b的地址"+System.identityHashCode(b));//基本类型相互比较其中的值,得trueSystem.out.println("i==j:"+(i==j));//int的引用类型Integer与基本类型进行比较的时候,包装类会先进行自动拆箱,然后与基本类型进行值比较System.out.println("i==x:"+(i==x));//同上,包装类先拆箱为基本类型,然后值比较System.out.println("i==a:"+(i==a));//都是引用类型,比较的是地址//在-128~127的Integer值并且以Integer x = value;的方式赋值的参数,x会从包装类型自动拆箱成基本数据类型,以供重用System.out.println("x==y:"+(x==y));//都是引用类型,比较的是地址System.out.println("a==b:"+(a==b));//当s,d超出-128~127区间的时候,地址就变了,所以比较的结果就是false。System.out.println("s==d:"+(s==d));} }运行结果:
i的地址366712642 j的地址366712642 x的地址366712642 y的地址366712642 a的地址1829164700 b的地址2018699554 i==j:true i==x:true i==a:true x==y:true a==b:false s==d:false再看其它的包装器自动拆箱情况:
equals()方法介绍
它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。
Boolean、Byte、Short、Integer、Long、Float、Doulbe、Character 8种基本类型的包装类都重写了 equals() 方法,所以比较的时候,如果内容相同,则返回 true,例如:
Integer a=new Integer(100);//引用数据类型 Integer b=new Integer(100);//引用数据类型 System.out.println("a==b:"+(a==b)); System.out.println(a.equals(b));运行结果:
a==b:false trueString类型的比较介绍
string是一个非常特殊的数据类型,它可以通过String x = value;的方式进行赋值,也可以通过String x = new
String(value)方式进行赋值。
String x = value;方式赋予的参数,会放入常量池内存块区域中;
String x = new String(value);方式赋予的参数,会放入堆内存区域中,当成对象处理。
运行结果:
a的地址366712642 b的地址1829164700 x的地址2018699554 y的地址2018699554 x==y:true a==b:false true为什么string的equals()方法比较返回true,因为string重写了equals()方法
如果需要比较某个对象是否相同,一定要重写equals(),比较其中的内容是否相同,如果相同,返回true;否则,返回false!
运行输出:
name1==name2:false name1==name3:false name2==name3:true name1.equals(name2):true name1.equals(name3:true name2.equals(name3):true内存示意图:
总结
以上是生活随笔为你收集整理的==与equals,String的equals()方法的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 1.9 通过反射获取注解信息
- 下一篇: 1.2 实例:封装图书信息类