zoukankan      html  css  js  c++  java
  • Object类和String类equals方法有什么区别?

    相信很多学习过Java的同学都知道,在比较两个String对象的内容是否相同时是使用equals方法的

    如:String str1=new String(“A”);
        String str2=new String(“B”);
        String str3=new String(“B”);
        boolean result1= str1.equals(str2);
        boolean result2= str2.equals(str3);
        System.out.println(result1);
        System.out.println(result2);
    则输入的result1为false,result2为true。因为str1与str2的内容不相同,而str2与str3内容相同都是“B”。
     
    而在String类中使用“==”时,比较的是两个String对象的引用是否指向同一个对象,如
        String str4=new String(“B”);
        String str5=new String(“B”);
        String str6=str5;
        boolean result3=(str4==str5);
        boolean result4= (str5==str6);
        System.out.println(result3);
        System.out.println(result4);
    则输入的result3为false,result4为true。因为str4、str5虽然内容相同但它们是不同的对象,就像两个同样的杯子装着同样多的水,可它们是不同的,result3为false。而str5、str6是指向同一个String对象的,所以result4为true。
    再说明一点,String str = new String("abc")和String str ="abc"是有一点小区别的,对于new出来的String对象,是每new一个内存里生成一个,也就是说其允许存在内容相同的重复对象。而String str ="abc"这种形式是不允许存在内容相同的重复对象,只要内存已经存在了,就不再新生成,而是把新的引用指向原来的对象。
     
    以上是String类equals方法和"=="的区别和联系。下面再说说Object类的equals方法。
    大家首先要明确一点Object类是所有Java类的父类,所有的Java类都要继承Object类,所以通常我们写程序的时候不显式声明继承Object类,而是默认继承Object类。
    在Object类的equals方法的本质其实是和“==”一样的,都是比较两个对象引用是否指向同一个对象(即两个对象是否为同一对象)。那为什么String类的equals方法却又是比较两个String对象的内容是否相同呢?
    原来是这样的,String类继承Object类后,也继承了equals方法,但String类对equals方法进行了重写,改变了equals方法的比较形式。其实很多其他类继承Object类后也对equals方法进行了重写。
    希望以上几点对大家有用,共勉。
  • 相关阅读:
    虚拟机安装 ubuntu 后,更新源无效,以及无法联网安装软件的问题
    使用IE滤镜实现css3中rgba让背景色透明的效果
    C# 代理应用
    通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页
    ICMP:internet 控制报文协议
    多模板支持
    C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举
    IOS中KVO模式的解析与应用
    ASP.NET MVC实现仪表程序
    spring和redis的整合
  • 原文地址:https://www.cnblogs.com/efforts-will-be-lucky/p/7148265.html
Copyright © 2011-2022 走看看