前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【J2SE快速进阶】——Java中的equals和==的区别

【J2SE快速进阶】——Java中的equals和==的区别

作者头像
DannyHoo
发布2018-09-13 11:38:30
3190
发布2018-09-13 11:38:30
举报
文章被收录于专栏:Danny的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1336953

       我们都知道,Java中数据类型大体上可分为两类:基本数据类型和引用数据类型。equals和==都是用来比较数据与数据是否“相等”。

基本数据类型的比较

       基本数据类型之间的比较用“==”,用来判断它们的值是否相等。

       示例代码:

代码语言:javascript
复制
public class Test{
	public static void main(String[] args){
		int i1=9;
		int i2=9;
		boolean b1=true;
		boolean b2=true;	
		char c1='c';
		char c2='c';
		System.out.println(i1==i2);    //输出为true
		System.out.println(b1==b2);    //输出为true
		System.out.println(c1==c2);    //输出为true
	}
}

        基本数据类型之间的比较不用equals。  

引用数据类型的比较

        引用类型之间既可用“==”来比较,又可以用equals来比较。

        用“==”来比较引用对象

        用“==”来比较引用对象的时候,比较的是他们的地址,即在栈中存放的变量值。

代码语言:javascript
复制
public class Test{
        public static void main(String[] args){
                Person p1=new Person("Danny",24);
                Person p2=p1;
                Person p3=new Person("Danny",24);
                System.out.println(p1==p2);    //输出为true
                System.out.println(p1==p3);    //输出为false
        }
}
class Person{
        public String name;
        public int age;
        public Person(String name,int age){
        this.name=name;
        this.age=age;
        }
}

         这时的内存图为:

          p1和p2都指向同一个对象,所以p1和p2中存放的地址是一样的,而“==”比较的正是他们在栈中存放的值,所以p1==p2的值为True; p3和p1指向的对象虽然一模一样,但是不是同一个对象,所以p1!=p3(或者p1==p3==false)。

         特殊情况,

         对于String和Integer来说,创建对象的方式不同,用“==”比较的结果是不同的,比如:

代码语言:javascript
复制
public class Test{
	public static void main(String[] args){
		String a1="hello";
		String a2="hello";
		String a3=new String("world");
		String a4=new String("world");
		System.out.println(a1==a2);    //输出为true
		System.out.println(a3==a4);    //输出为false
	}
}

         用equals来比较引用类型

         在基类Object中定义了equals方法,这个方法比较的也是对象的内存地址,即上例中如果把“p1==p2”换成p1.equals(p2),结果也是一样的。

         特殊情况,

         如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是比较两个变量指向的对象是否是同一个对象,这时候使用equals和使用==会得到同样的结果。

         但有些类重写了Object类中的方法,这时它比较的是所指对象的内容是否相同。比如:

代码语言:javascript
复制
public class Test{
	public static void main(String[] args){
		String a1="hello";
		String a2="hello";
		String a3=new String("hello");
		String a4=new String("hello");
		System.out.println(a1==a2);    //输出为true
		System.out.println(a3==a4);    //输出为false
		System.out.println(a1.equals(a4));    //输出为true		
	}
}
class Person{
	public String name;
	public int age;
	public Person(String name,int age){
		this.name=name;
		this.age=age;
	}
}

         上面的a1和a4显然不是指向同一个对象,但它们所指对象中的内容相同,所以a1.equals(a4)的值为true。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年01月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本数据类型的比较
  • 引用数据类型的比较
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档