Java中equal和==的区别

大家先来做个题目,以下看下自己能不能作对。


public class Test1{
    public static void main(String args[]){
            String a="1234";
            String b="1234";
            String c = new String("1234");
            System.out.println(a==b);
            System.out.println(a==c);
            System.out.println(a.equals(c));
    }
}

正确答案是答案是:1.true 2.false 3.true
下面我来分析下过程:
①第一次String a="1234"时,会在常量池中创建一个常量1234,String b=1234时,常量 池中已经有了该常量,所以直接取,a和b的地址一样,所以地址值相等;
②String c = new String("1234")重新new了对象,在堆内存中开辟了新的空间,所以地址值不相等,
③String 类中重写的 equals 方法,所以只比较字符串内容 , 不比较地址值所以为true
(但在一些类库当中这个方法 被重写 了,如 String,Integer,Date 在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。)

最后我再总结下equals()与==的区别:
①对于==号来说,如果是作用于基本数据类型的变量,比较的是他们的值是否相等;
如果是作用于引用类型的变量,是判断两个对象内存地址是不是相等。

②对于equals()来说,如果没有重写equals()办法,等价于通过“==号”比较这两个对象。
如果重写equals()办法,作用是比较内容是否相同。如果内容相等,则返回true。
(如String,Data中的这个方法重写了,作用比较内容是否相同。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 注:都是在百度搜索整理的答案,如有侵权和错误,希告知更改。 一、哪些情况下的对象会被垃圾回收机制处理掉  当对象对...
    Jenchar阅读 3,263评论 3 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,256评论 19 139
  • 博客大巴依然没开,我去搜了一下,能看见的文章是剩下写饮食男女的一篇。看几年前自己写的东西也觉得陌生,心想肯定是生娃...
    鼹鼠阅读 379评论 0 0
  • 【写作成长计划】第十天 ――林恩 下午沿着公路边带着可爱的弟弟们一起散步,他们没有走过这条路,对周边环境表示新奇。...
    二公主和王子阅读 268评论 0 0