zoukankan      html  css  js  c++  java
  • “==” 和 equals()的区别

    ※ “==” 和 equals()的区别

    ※ == :比较
    . 基本数据类型比较的是值;
    . 引用类型比较的是地址值。

    ※ equals(Object o):
    1)不能比较基本数据类型,基本数据类型不是类类型;
    2)a.比较引用类型时(该方法继承自Object,在object中比较的是地址值)等同于”==”;
    Object类中的方法,所以,在每一个java类中,都会有这个方法,因为每一个java类都是直接或者间接的Object类的子类,会继承到这个方法。

    2)b.如果自己所写的类中已经重写了equals方法,那么就安装用户自定义的方式来比较俩个对象是否相等,如果没有重写过equal方法,那么会调用父类(Object)中的equals方法进行比较,也就是比较地址值。

    注:有的实现类中(JDK中),重写了equals方法,这时候比较内容(java.lang.String)
    在自定义类中,如果比较对象,自己可以重写equals方法定义比较规则。

    注意:equals(Object o)方法只能是一个对象来调用,然后参数也是要传一个对象的。

    所以下面是错误的写法:
    int a = 1;
    a.equals(1);
    因为基本数据类型不是算是对象,不能调用方法。

    1)如果是基本数据类型那么就用==比较
    2)如果是引用类型的话,想按照自己的方式去比较,就要重写这个类中的equals方法,
    如果没有重写,那么equals和==比较的效果是一样的,都是比较引用的地址值。
    3)如果是比较字符串,那么直接用equals就可以了,因为String类里面已经重写了equals方法,
    比较的时候字符串的内容,而不是引用的地址值了。

    ※ toString(): Object类中的方法,所以,在每一个java类中,都会有这个方法,因为每一个java类都是直接或者间接的Object类的子类,会继承到这个方法。

    toString()方法,继承自Object(默认构造对象之后打印地址值,可以不指明toString()方法,隐式调用)
    Student s=new Student();
    Syso(s);
    Syso(s.toString())
    注:如果在代码中,不希望打印地址,
    可以重写toString()方法(一般情况用于打印构建对象的属性)

    当前用一个引用指向一个对象的时候,比如:Student s = new Student(),然后如果直接打印这个引用s,其实是调用了s.toString()方法,然后就会把这个引用里面的存放的堆区对象的地址值显示出来。所以我们会常常在类中重写这个toString()方法,然后让这个类的引用按照我们要求来返回内容。

    String源码中重写的equals方法:

     String源码中重写的toString方法:

    ※ 简述String s=”“和” “,以及null的区别

    “”代表空字符串,会在堆区开辟空间。
    “ ”代表一个还有空格字符的字符串。
    null 代表空值,不会再堆区开辟空间。

  • 相关阅读:
    递归算法解析成树形结构
    Tomcat性能参数设置
    hibernate.cfg.xml 配置(摘录)
    OpenCms 集成外部Solr Server
    安装配置OPENCMS的Replication cluster(从)详细过程
    ruby 格式化当前日期时间
    Ruby 语法快速入门
    ruby condition
    配置 RAILS FOR JRUBY1.7.4
    我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout(五)框架及Web项目的组件化
  • 原文地址:https://www.cnblogs.com/chcha1/p/11565340.html
Copyright © 2011-2022 走看看